【发布时间】:2021-02-09 17:11:26
【问题描述】:
我正在自学 Kotlin,基于一些非常古老的编码知识,所以我可能会遗漏一些非常明显的东西。
基本上,每次从 Room 数据库返回时,我都想稍微调整一些 LiveData。 LiveData 是一个键值对,即使请求的项目不在数据库中,我也想确保分配了键,因此 LiveData 永远不会为空。我尝试了多种方法来做到这一点——最近一次是使用 LiveData 构建器,但它往往第一次返回 null,然后永远不会更新。我认为我遇到的问题(我希望 LiveData 构建器能够解决)是 LiveData 没有及时从数据库返回以进行调整。
我知道我可以用两个 LiveData 对象来做到这一点——观察一个直接来自数据库的对象,然后在将它分配给第二个变量之前执行调整——但我会用大量的数据来做这件事变量,并且必须有更清洁的方法。
这是我尝试的最后一件事。
在 ViewModel 中:
val myLiveData = liveData {
val rawLiveData = database.get("key")
emit(myDataClass("key", rawLiveData.value?.plotInput.toString().trim()))
}
在 DAO 中
@Query("SELECT * from database_table WHERE key = :key")
fun get(key: String): LiveData<myDataClass?>
我希望这是清楚的,而不是太愚蠢的问题!
【问题讨论】:
标签: kotlin android-room android-livedata