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