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

时间:2019-06-05 08:01:11

标签: android rx-java android-room android-livedata

我使用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)
}

1 个答案:

答案 0 :(得分:2)

documentations会议室出发:

  

可观察的查询

     

执行查询时,您通常会希望   应用的用户界面,可在数据更改时自动更新。实现   在查询方法中使用LiveData类型的返回值   描述。 Room生成所有必要的代码以更新LiveData   数据库更新时。

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