嗨,我正在尝试使用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()
再次发出)。