嗨,我正在尝试使用rxjava以及在返回之前使用Map进行转换的LiveData。但是它说我需要从 map 内部返回一些东西。

我试着做return Single.just(pianoStorage.getAllFavItems()),但它抱怨您不允许返回某些东西?

override fun getFavouriteItems() : Single<LiveData<MutableList<Items>>>{
        //check if db has offers
        if (storage.getAllFavItems().value!!.isEmpty()){
             getAllFavItems().map {
                 {offers : ItemsResponse ->
                     storage.saveAllItemsLists(offers)
                     Single.just(storage.getAllFavItems())
                 }
             }.subscribe(
                     {offers ->
                         return@subscribe
                     }
             )
        }else{
            return Single.just(storage.getAllFavItems())
        }
    }

下面的代码基本上检查我的持久数据库是否存在某些项目,如果不存在,则使用改造(getAllFavItems())从网络中获取它。

此网络调用获取所有项目列表,然后我需要做的是首先将其保存到存储中,然后使用以下方法从后记中仅获取喜欢的项目:
@Query("SELECT * FROM items WHERE state = 'Fav'")
    fun getAllFavItems(): LiveData<MutableList<Item>>

最佳答案

如果将DAO定义更改为:

@Query("SELECT * FROM items WHERE state = 'Fav'")
fun getAllFavItems(): Flowable<MutableList<Item>>

您可以执行以下操作:
getAllFavItems()
    .flatMap({
        if(it.isEmpty()) {
            getAllFavItems().toFlowable(BackpressureStrategy.XXX)
                .doOnNext({storage.saveAllItemsLists(it)})
                .map {/*TODO: convert from ItemsResponse to List<Item>*/}
        } else {
            Flowable.just(it)
        }
    })

该代码发出对收藏项的更改。如果有0个收藏夹项,它将调用getAllFavItems()函数并将结果插入db(插入结果将导致getAllFavitems()再次发出)。

07-27 16:01