2017-10-30 27 views
0

私はRxJava 2 *を使用しています。私はzip演算子を使用して2つの観測値の結果を併合したいと思います。Rxjava Observablesを圧縮できません

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

  1. 私は、これらの二つの結果
  2. が結果を表示するマージ
  3. 地元のものにリモートからオブジェクトをマップします。

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

    }

    そして、私のルームDAOクエリは次のようになります:

私のリモートAPIは、このようになりますように>観察可能に>私が観察変換した

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

これは:

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() 
     } 

しかし、私はこのようなこれら二つの観測zip圧縮しようとすると:

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

を私は型推論が失敗し得る、予想される型の不一致 enter image description here

答えて

0

エラーが実際にあなたジップできることを示していますそれらはObservable<Pair<...>>を生成します。問題は、結果を間違ったタイプに割り当てることです。これはval x: String = 1 + 2に「私はIntを追加できません」と言うのと同じですが、もちろん結果はStringではありません。

zipWithを使用して、の値をにマージする必要があります。

0

私は3つの間違いやった:代わりにObservable.zipの)Observables.zip(使用し

  1. を()

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

  3. 部屋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) }) 
    
    :だから私はこれら二つの観測量を圧縮する

関連する問題