Android 数据库更改时重新查询房间
Android Room requery on db change
我正在使用最新的 Room Persistance Library 编写应用程序。
该应用程序简单地显示项目列表并随着数据更改更新此列表。
当新项目插入 table 或更新时,我希望列表自动更新。
到目前为止,我尝试了原版 LiveData
和 Flowable
。两者都声称支持此功能,如文档和此博客中所述:
https://medium.com/google-developers/room-rxjava-acb0cd4f3757
这是 Kotlin 中的 ViewModel
片段:
messagesFlowable = db.messagesDao().all()
messagesFlowable
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
Log.d(TAG, "Received 1 list of %s items", it.size)
messages.value = it
}
在别处,数据库是这样修改的:
mDb.messagesDao().add(Message("Some data"))
更新不会推送给观察者。我想我错过了什么,但是什么?
更新:此问题已解决,答案如下。
我会回答我自己的问题,因为没有记录解决方案。
看来您需要具有相同的数据库对象实例。
就我而言,我的 Dagger2 被错误配置为每次都注入新的 DB 实例,所以我的 Repository
和 ViewModel
最终有 2 个单独的实例。
一旦我使用在所有相关方之间共享的单个数据库实例,所有更新都会正确分发。
我正在使用最新的 Room Persistance Library 编写应用程序。 该应用程序简单地显示项目列表并随着数据更改更新此列表。
当新项目插入 table 或更新时,我希望列表自动更新。
到目前为止,我尝试了原版 LiveData
和 Flowable
。两者都声称支持此功能,如文档和此博客中所述:
https://medium.com/google-developers/room-rxjava-acb0cd4f3757
这是 Kotlin 中的 ViewModel
片段:
messagesFlowable = db.messagesDao().all()
messagesFlowable
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
Log.d(TAG, "Received 1 list of %s items", it.size)
messages.value = it
}
在别处,数据库是这样修改的:
mDb.messagesDao().add(Message("Some data"))
更新不会推送给观察者。我想我错过了什么,但是什么?
更新:此问题已解决,答案如下。
我会回答我自己的问题,因为没有记录解决方案。
看来您需要具有相同的数据库对象实例。
就我而言,我的 Dagger2 被错误配置为每次都注入新的 DB 实例,所以我的 Repository
和 ViewModel
最终有 2 个单独的实例。
一旦我使用在所有相关方之间共享的单个数据库实例,所有更新都会正确分发。