处理和呈现来自静态数据+Room Sqlite数据的混合数据



我有一个Android应用程序,它使用二维数据集,例如:

1 2 3
1 A B C
2 D E F
3 G H I

该数据的A、B、C值可以来自以下两个位置之一:

  1. Kotlin类中的硬编码Map(默认值(
  2. 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)
}
}

我不知道这是否是完美的解决方案,但到目前为止还不错。

最新更新