我有一个Android应用程序,它使用二维数据集,例如:
1 2 3
1 A B C
2 D E F
3 G H I
该数据的A、B、C值可以来自以下两个位置之一:
- Kotlin类中的硬编码Map(默认值(
- Room sqlite数据库中的可选覆盖值
用户可以选择自定义某些值,例如,覆盖的一些数据库条目可能如下所示:
x,y,value
2,2,X
3,1,Y
3,3,Z
这将把我的合并数据更新为:
1 2 3
1 A B Y
2 D X F
3 G H Z
我有被添加到DB中的覆盖数据,并且我有Kotlin类中的源数据,但我正在努力寻找正确的方法来检索和合并这些数据,以便在计算中使用,也可以将其呈现为用户的表。
我该如何处理?我知道LiveData和RecyclerView,但我所遵循的示例假设DB中有一个完整的数据集,所以我不知道如何使用Kotlin类中的数据来"填补空白"。此外,我不确定我是否应该将LiveData用于计算方面,这些方面涉及将用户的一些任意输入与表中的值进行比较。
欢迎任何建议:(
作为这些场景中的标准,在发布问题后不久,我给出了答案。这似乎是合乎逻辑的,所以我现在就用它,以下是它的要点。
我创建了一个ViewModel,其中包含我的数据的LiveData列表。然后,我在相关活动的onCreate中添加了一个观察者。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
myViewModel.myData.observe(this, Observer {
data -> data?.let { myStaticDataClass.mergeFromDatabase(it) }
})
}
然后mergeFromDatabase
方法将数据库中的记录合并到我的静态数据中,从而创建合并的版本。
fun mergeFromDatabase(dbValues: List<MyData>)
{
for (value in dbValues) {
staticData[value.keyY]?.set(value.keyX, value.customValue)
}
}
我不知道这是否是完美的解决方案,但到目前为止还不错。