如何在Android上将多个http请求和数据库查询与Rxjava结合起来
为了过滤数据,我需要执行多个http请求和一个数据库查询 我正在使用Rxjava的zip操作符 为了准备多个http请求,我执行了以下操作如何在Android上将多个http请求和数据库查询与Rxjava结合起来,android,rx-java,Android,Rx Java,为了过滤数据,我需要执行多个http请求和一个数据库查询 我正在使用Rxjava的zip操作符 为了准备多个http请求,我执行了以下操作 List<Observable<List<Picture>>> requests = new ArrayList<>(); for(String id : photoIds) { requests.add(pictureRepository.searchPicture(id).toObserva
List<Observable<List<Picture>>> requests = new ArrayList<>();
for(String id : photoIds) {
requests.add(pictureRepository.searchPicture(id).toObservable());
}
List requests=new ArrayList();
用于(字符串id:photoID){
add(pictureRepository.searchPicture(id.toObservable());
}
为了准备数据库请求,我执行了以下操作
Observable<List<Favourite>> favourites = pictureRepository.getFavourites().toObservable();
Observable favorites=pictureRepository.GetFavorites().toObservable();
我试图创建可观察的,但rxjava不接受我的代码
Observable.zip(
requests, favourites,
new BiFunction<Object[], List<Favourite>, List<FavouritePictures>>() {
@Override
public List<FavouritePictures> apply(Object[] t1, List<Favourite> t2) throws Exception {
return /*here I want to check the favourites and return a list*/;
}
}
);
Observable.zip(
请求、收藏夹、,
新的双函数(){
@凌驾
公共列表应用(对象[]t1,列表t2)引发异常{
return/*在这里,我想查看收藏夹并返回列表*/;
}
}
);
有没有办法做到这一点?
谢谢下面是一个可能适用于此的解决方案:
val photoIds = listOf(1, 2, 3)
var index = 0
Observable.just(0).flatMapSingle {
pictureRepository.searchPicture(photoIds[index])
index += 1
}.repeatUntil {
index + 1 == photoIds.size - 1
}.toList().zipWith(pictureRepository.getFavourites(),
BiFunction { listOfPictures, listOfFavoratePictures ->
// Return your list
})
您也可以使用递归方法实现这一点,但我个人认为这更具可读性。请指定您的结果应该是什么样子?收藏夹将发布多少列表?是否要将每个收藏夹发射与每个列表发射组合,还是要将最新收藏夹发射与最新列表组合?我的结果应该是图片列表,其中数据库中标记为收藏夹的图片应将字段“收藏夹”标记为true。换句话说,我想标记最喜欢的图片,但仍然显示那些不是最喜欢的图片