![](/img/trans.png)
[英]how to change LiveData observable query parameter with room database in android?
[英]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.