我正在尝试使用MVVM体系结构构建应用程序。 但是当使用RxJava下载此值后,我不知道如何将其从ViewModel移至Fragment。
目前,我有这段代码,但我不知道该怎么做。 有人可以帮忙吗?
片段:
viewModel.loadListOfCats().observe(this, Observer {
it?.let {
listOfCats.clear()
listOfCats.addAll(it.listOfCats)
catAdapter.notifyDataSetChanged()
}
})
在ViewModel中:
fun loadListOfCats(): LiveData<ListOfCats>{
compositeDisposable.add(listOfQuizzesRepository.getListOfCats()
.subscribeWith(object: DisposableSingleObserver<ListOfCats>(){
override fun onSuccess(t: ListOfCats) {
val listOfCats= t
}
override fun onError(e: Throwable) {
}
}))
return ?
}
答案 0 :(得分:0)
Rx完成是通过异步过程而不是同步过程进行的。就是说,当此功能涉及return ?
时,Rx尚未完成其工作。
因此,您不能在函数末尾返回从Rx获得的值。
您必须在其onSuccess和onError回调中设置值。
class YourViewModel {
val listCats = MutableLiveData<ListOfCats>()
fun loadListOfCats() {
...
override fun onSuccess(t: ListOfCats) {
listCats.value = t
}
...
}
}
class YourFragment {
...
viewModel.listCats.observe(this, Observer {
it?.let {
...
}
})
}