将Observable <List <T >>转换为List <T>

时间:2019-07-07 10:02:39

标签: android kotlin rx-java rx-android androidx

我想从MutableLiveData<List<Country>>()获取Observable<List<Country>>对象,但是我找不到方法。

我在下面使用实现,但无法正常工作。还有其他方法可以实现它,还是我当前的实现方式有问题?

dataManagerAnonymous.countries.toList().blockingGet().single()

上面的代码显示NetworkOnMainThreadException并使应用程序崩溃。

2 个答案:

答案 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()