我想从MutableLiveData<List<Country>>()
获取Observable<List<Country>>
对象,但是我找不到方法。
我在下面使用实现,但无法正常工作。还有其他方法可以实现它,还是我当前的实现方式有问题?
dataManagerAnonymous.countries.toList().blockingGet().single()
上面的代码显示NetworkOnMainThreadException
并使应用程序崩溃。
答案 0 :(得分:0)
dataManagerAnonymous
.countires
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { result ->
// result is List<Country>
}
dataManagerAnonymous.countires
可能会执行网络请求,应该在后台线程上执行网络请求,以防止UI线程阻塞。 subscribeOn(Schedulers.io())
在后台线程上调用您的请求。 observeOn(AndroidSchedulers.mainThread())
使您可以在UI线程上使用此调用的结果。当您的请求成功完成并且结果数据已准备好处理时,Subscribe块将被调用。
答案 1 :(得分:-1)
此扩展方法将Observable<T>
转换为MutableLiveData<T>
:
fun <T> Observable<T>.asMutableLiveData() = object : MutableLiveData<T>() {
var disposable: Disposable? = null
override fun onActive() {
super.onActive()
disposable = this@asMutableLiveData.subscribe(this::postValue)
}
override fun onInactive() {
super.onInactive()
disposable?.dispose()
}
}
...
dataManagerAnonymous.countries.asMutableLiveData()