繁体   English   中英

当Room数据库中发生更改时,LiveData更新我的观测值

[英]LiveData updates my observable when changes occur in Room database

我使用LiveData在Room中的表中显示记录数。 我调用一个函数来检索此计数,并在接收到该计数后调用观察者来显示该计数。 这按预期工作。 但是我还运行着一个服务,该服务从后端检索数据并将其存储在读取计数的同一表中。 但是,只要存储了数据,每次都会调用可观察对象,并且显示的计数也会更新。 我不确定为什么会这样。 我确实希望这种情况发生。 我只是不明白为什么会这样。 当我运行代码以检索计数时,它是使用RxJava完成的。 因此,当调用完成时,我看不到任何可观察计数随每个数据存储更新的原因。 唯一可能的原因是,Room会跟踪我的计数查询,并在存储数据时执行该查询。 那可能吗? 这是我获得计数的代码:

在我的片段中观察到:

viewModel.onConnectionsCountRetrieved.observe(this, Observer { count ->
    var title = getString(R.string.connections)

    if (count > 0)
        title += " (" + "%,d".format(count) + ")"

    (activity as MainActivity).getSupportActionBar()?.title = title
})

在我的视图模型中:

val onConnectionsCountRetrieved: MutableLiveData<Int> = MutableLiveData()

@SuppressLint("CheckResult")
fun getConnectionsCount() {
    val disposable = connectionsBO.getConnectionsCount()
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(
            { count -> onConnectionsCountRetrieved.postValue(count) },
            { ex -> App.context.displayErrorMessage(R.string.problem_retrieving_total_connection_count) }
        )

    disposables.add(disposable)
}

从会议室文件

可观察的查询

执行查询时,您通常会希望您的应用程序的UI在数据更改时自动更新。 为此,请在查询方法说明中使用LiveData类型的返回值。 在数据库更新时,Room会生成所有必需的代码来更新LiveData。

Room还为RxJava提供了相同的功能。 您可以在生成的类YourDao_Impl.java看到查询的实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM