![](/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.