【问题标题】:Android Room requery on db changeAndroid Room 重新查询数据库更改
【发布时间】:2017-08-13 09:35:54
【问题描述】:

我正在使用最新的房间持久性库编写应用程序。 该应用程序仅显示一个项目列表并在数据更改时更新此列表。

当新项目插入表格或更新时,我希望列表自动更新。

到目前为止,我尝试了香草 LiveDataFlowable。两者都声称支持此功能,如文档和此博客中所述: 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


【解决方案1】:

我会回答我自己的问题,因为没有记录解决方案。

看起来您需要拥有相同的数据库对象实例。 就我而言,我的 Dagger2 被错误配置为每次都注入新的 DB 实例,所以我的 RepositoryViewModel 最终得到了 2 个单独的实例。

一旦我使用在所有相关方之间共享的单个数据库实例,所有更新都会正确分发。

【讨论】:

    猜你喜欢
    • 2021-11-16
    • 2021-01-06
    • 2019-05-01
    • 2020-05-20
    • 1970-01-01
    • 2018-12-27
    • 2023-02-24
    • 2020-11-20
    • 1970-01-01
    相关资源
    最近更新 更多