Android 如何使用 Rxjava 结合多个 http 请求和数据库查询

How to combine multiple http requests and database query with Rxjava on Android

我需要执行多个 http 请求和一个数据库查询才能过滤数据。

我正在使用 Rxjava 的 zip 运算符

我做了以下准备我的多个 HTTP 请求

 List<Observable<List<Picture>>> requests = new ArrayList<>();


 for(String id : photoIds) {
    requests.add(pictureRepository.searchPicture(id).toObservable());
 }

我做了以下准备我的数据库请求

Observable<List<Favourite>> favourites = pictureRepository.getFavourites().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*/;
            }
        }
);

有办法实现吗? 谢谢

可能适用于此的解决方案如下:

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
         })
  1. 此可观察流将从发出 0 开始;
  2. 然后它将流平面映射到单个 Observable 和 return 来自 searchPicture 调用的可观察流;
  3. 此过程将一直持续到达到最后一个项目索引为止;
  4. 然后我们将要发出的结果映射为一个列表;
  5. 最后我们使用 getFavourites 调用压缩单个 Observable;

您也可以使用递归方法实现此目的,但我个人认为这更具可读性。