簡體   English   中英

無法壓縮Rxjava Observables

[英]Cannot zip Rxjava Observables

我正在使用RxJava 2. *,並且我想通過使用zip運算符合並兩個可觀察到的結果(一個來自改造,另一個來自房間)(隨意建議更好)。

來自遠程服務器的模型對象不同於來自Room Database的模型對象。

  1. 我想將對象從遠程映射到本地
  2. 合並這兩個結果
  3. 顯示結果。

我的遠程API看起來像這樣:

interface CategoryService{
@GET("categories")
fun getCategories(): Observable<List<Category>>

}

我的Room DAO查詢如下所示:

@Query("SELECT * FROM categories ORDER BY id")
abstract fun categories(): Observable<List<KmagCategory>>

我已經將Observable>轉換為Observable>,如下所示:

val newCategoryList : Observable<List<KmagCategory>> =settingService.getCategories().flatMap { list ->
            Observable.fromIterable(list)
                    .map { item -> KmagCategory(item.id, item.title, item.slug, item.isFav) }
                    .toList()
                    .toObservable()
        }

但是當我嘗試像這樣壓縮這兩個可觀察對象時:

val combinedObservable : Observable<List<KmagCategory>> = Observables.zip(KMagApp.database?.categories()?.categories()!!,newSetting)

我得到類型推斷失敗,預期類型不匹配 在此處輸入圖片說明

該錯誤實際上告訴您可以壓縮它們,從而產生Observable<Pair<...>> 問題是您將結果分配給錯誤的類型。 這就像在val x: String = 1 + 2說“我不能添加Int s” val x: String = 1 + 2 :當然可以,但是結果不是String

您需要使用zipWith並指定如何合並值。

我犯了三個錯誤:

  1. 使用Observables.zip()代替Observable.zip()

  2. 沒有告訴他們如何壓縮它們。

  3. Room DAO無法理解Observable,因此請使用Flowable。

因此,我壓縮了這兩個可觀察對象:

val combinedObservable = Observable
    .zip(KMagApp.database?.categories()?.categories()?.toObservable(), newSetting, 
    BiFunction<List<KmagCategory>, List<KmagCategory>, List<KmagCategory>> 
    { s1, s2 -> getCombinedList(s1, s2) })

暫無
暫無

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

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