0

私は RxJava 2.* を使用しており、zip 演算子を使用して 2 つのオブザーバブル (1 つは改造から、もう 1 つは部屋から) の結果をマージしたいと考えています (お気軽に提案してください)。

リモート サーバーからのモデル オブジェクトは、ルーム データベースからのモデル オブジェクトとは異なります。

  1. リモートのオブジェクトをローカルのオブジェクトにマップしたい
  2. これら 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()
        }

しかし、これら2つのオブザーバブルを次のように圧縮しようとすると:

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

Type inference failed, Expected type mismatch というメッセージが表示されます ここに画像の説明を入力

4

2 に答える 2

0

私は3つの間違いを犯しました:

  1. Observable.zip() の代わりに Observables.zip() を使用

  2. それらを圧縮する方法を教えてくれませんでした。

  3. Room DAO は Observable を認識しないため、Flowable を使用します。

したがって、これら2つのオブザーバブルを圧縮するには、次のことを行いました。

val combinedObservable = Observable
    .zip(KMagApp.database?.categories()?.categories()?.toObservable(), newSetting, 
    BiFunction<List<KmagCategory>, List<KmagCategory>, List<KmagCategory>> 
    { s1, s2 -> getCombinedList(s1, s2) })
于 2017-10-30T08:11:49.123 に答える