簡體   English   中英

轉換 Observable <List<T> &gt; 列出<T>

[英]Convert Observable<List<T>> to List<T>

我想從Observable<List<Country>>獲取MutableLiveData<List<Country>>()對象,但我找不到方法。

我正在使用下面的實現,但它不起作用。 有沒有其他方法可以實現它,或者我當前的實現有什么問題?

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

上面的代碼顯示了NetworkOnMainThreadException並使應用程序崩潰。

dataManagerAnonymous
    .countires
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe { result ->
        // result is List<Country>
    }

dataManagerAnonymous.countires可能會執行網絡請求,應該在后台線程上執行網絡請求,以防止UI線程阻塞。 subscribeOn(Schedulers.io())在后台線程上調用您的請求。 observeOn(AndroidSchedulers.mainThread())允許您在UI線程上使用此調用的結果。 當您的請求已成功完成並且結果數據已准備好處理時,將調用訂閱塊。

此擴展方法將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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM