[英]Cannot zip Rxjava Observables
我正在使用RxJava 2. *,並且我想通過使用zip運算符合並兩個可觀察到的結果(一個來自改造,另一個來自房間)(隨意建議更好)。
來自遠程服務器的模型對象不同於來自Room Database的模型對象。
我的遠程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
並指定如何合並值。
我犯了三個錯誤:
使用Observables.zip()代替Observable.zip()
沒有告訴他們如何壓縮它們。
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.