簡體   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