我使用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)
}
答案 0 :(得分:2)
从documentations会议室出发:
可观察的查询
执行查询时,您通常会希望 应用的用户界面,可在数据更改时自动更新。实现 在查询方法中使用LiveData类型的返回值 描述。 Room生成所有必要的代码以更新LiveData 数据库更新时。
Room还为RxJava提供了相同的功能。您可以在生成的类YourDao_Impl.java
中看到查询的实现。