【发布时间】:2017-08-13 09:35:54
【问题描述】:
我正在使用最新的房间持久性库编写应用程序。 该应用程序仅显示一个项目列表并在数据更改时更新此列表。
当新项目插入表格或更新时,我希望列表自动更新。
到目前为止,我尝试了香草 LiveData 和 Flowable。两者都声称支持此功能,如文档和此博客中所述:
https://medium.com/google-developers/room-rxjava-acb0cd4f3757
这是 Kotlin 中的ViewModel sn-p:
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"))
更新不会推送给观察者。我想我错过了什么,但是什么?
更新:这个问题解决了,答案如下。
【问题讨论】:
-
也试过
LiveData<List<POJO>>?你使用LiveData的代码是什么? -
是的,我试过 LiveData。在 VM 中: val messages : LiveData
- > = db.messages().allLive() mVm.messages.observe(activity as BaseActivity, Observer { Log.d(TAG, "Messages updated: %s", it ?.size) if(it != null) mAdapter.messages = it })
-
您缺少对您的症状的解释和一个 minimal reproducible example 显示您如何修改数据库。另外,您的修改数据库代码是否与您的观察数据库代码在同一个过程中?
-
仔细检查你没有用这种方法泄露你的视图模型。 medium.com/google-developers/…
标签: android android-sqlite android-room android-architecture-components