使用 RxJava 将数据从 ViewModel 移动到 Fragment
Posted
技术标签:
【中文标题】使用 RxJava 将数据从 ViewModel 移动到 Fragment【英文标题】:Move data from ViewModel to Fragment using RxJava 【发布时间】:2019-11-23 00:54:33 【问题描述】:我正在尝试使用 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 ?
【问题讨论】:
【参考方案1】:Rx done 通过异步进程工作,而不是同步进程。这意味着当这个函数来到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
...
)
【讨论】:
以上是关于使用 RxJava 将数据从 ViewModel 移动到 Fragment的主要内容,如果未能解决你的问题,请参考以下文章
RxJava + Websocket - 如何将 Observable 添加到 Websocket 监听器?