链接多个RxJava,Room和Retrofit

我正在使用RxJava / Kotlin和Room和Retrofit。 我确信我没有写任何东西,因为我刚开始学习RxJava。 这种情况是我打电话来检查数据库中是否有最喜欢的记录,并将它们放入列表中,从API获取数据并将其插入到数据库中,使用之前的collections夹列表更新数据库,并获取所有记录更新,列表。 我得到了我的片段的结果,但每次我得到它,就好像我得到1不喜欢的项目,直到我没有collections的项目。

Repository

 fun getKafaniFromApi(): Observable<List> { return apiService.getKafani().toObservable().doOnNext { insertKafaniInDb(it) } } fun getKafaniFromDb(): Observable<List> { return kafanaDao.getKafani().toObservable() } fun insertKafaniInDb(kafani: List) { Observable.fromCallable { kafanaDao.insertAll(kafani) } .subscribeOn(Schedulers.io()) .subscribe { Timber.d("Inserted ${kafani.size} kafani from API in DB...") } } fun getFavoriteKafani(): Single<List> { return kafanaDao.getFavoriteKafani() } fun setKafanaFavorite(kafana: Kafana, isFavorite: Int) { return kafanaDao.setFavourite(kafana.name, isFavorite) } fun updateFavoriteKafana(kafana: Kafana) { return kafanaDao.updateFavoriteKafana(kafana) } 

在我的viewmodel

 fun get(): Observable<List> { return kafanaRepository.getFavoriteKafani() .toObservable() .doOnNext { kafaniList = it } .flatMap { kafanaRepository.getKafaniFromApi() } .doOnNext { kafaniList?.forEach { kafanaRepository.updateFavoriteKafana(it) } } .flatMap { kafanaRepository.getKafaniFromDb() } .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) } 

实际上,我将在片段中获得这个列表,但是正如我所说的那样,如果没有这个列表,它将永远是不那么受欢迎的。