![](/img/trans.png)
[英]Observer is triggered multiple times when calling postValue only once from LiveData
[英]Livedata observer onChanged() is only triggered once?
我正在在線關注LiveData示例,因此創建活動時,以某種方式僅將LiveData觸發一次。 如果我打開另一個活動來更新Oppo對象,然后返回到該活動,則不會調用onChanged()。 我不確定出了什么問題。 因為當我檢查LiveData時onResume()中有活動的觀察者,所以它返回true。
這是代碼:
活動
oppoViewModel = ViewModelProviders.of(this).get(OppViewModel.class);
OppoViewModel.setOppo(extras.getString(RECORD_ID));
oppoViewModel
.getOpportunity()
.observe(this, oppo -> {
// Update the UI
}
);
視圖模型
class OppoViewModel(application: Application) : AndroidViewModel(application) {
private var oppo: MutableLiveData<Oppo> = MutableLiveData()
private var compositeDisposable = CompositeDisposable()
fun setOppo(recordId: String) {
compositeDisposable.add(Single.just(RepositoryProvider.oppoRepository()
.getOppoByRecordId(recordId))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(object : DisposableSingleObserver<Oppo>() {
override fun onSuccess(t: Oppo) {
oppo.postValue(t)
}
override fun onError(e: Throwable) {
}
}))
}
fun getOpportunity(): MutableLiveData<Opp> {
return oppo
}
override fun onCleared() {
Timber.e("ViewModel onCleared()")
compositeDisposable.clear()
super.onCleared()
}
}
我正在使用RxJava從SQLite數據庫獲取數據庫記錄,並在這種情況下使用ContentResolver。 最初我認為oppo.postValue應該更改為oppo.setValue,但仍然不會觸發
但是您只有一個訂閱來進行更改
Single.just(RepositoryProvider.oppoRepository())
就您而言,這不是LiveDate
消耗更新值的責任,您需要確保您的rx流在更新后會發出新值。
僅當在后台進行首次活動時會觸發oppo.postValue(t)
時,才會設置新值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.