【问题标题】:How to properly combine multiple requests with rxjava2?如何将多个请求与 rxjava2 正确组合?
【发布时间】:2019-07-12 04:36:27
【问题描述】:

rxjava2 是否可以实现下面描述的序列?我有这样的课程:

class Holder {
    List<Image> images;
}
class Image {
    String url;
    String localFileUrl;
}

我需要一个类似的序列:

* Iterate over Holders;
  * For each Holder iterate over Images;
    * Working with each images(decode Bitmap from localFileUrl and upload 
     bitmap to network -> get url for image from network -> write url to 
     Image's file url);
* After iterating over all Holders(on this step all images inside Holders
 should have filled url), make upload for Holders;

我尝试过类似的方法:

Observable.fromIterable(holders)
  .concatMap(holder -> {
    Observable.fromIterable(holder.images)
      .concatMap(image -> {
        // decode bitmap here
        uploadImage(bitmap)
      })
  })
// what should I do here to get observable which emits holders,
// not result from uploadImage(bitmap)?
  .toList()
  .flatMap(? -> uploadeHolders());

是否可以迭代数据,对数据的每个项目执行一些操作,并对准备好的数据做一些工作(对每个项目执行操作)?

【问题讨论】:

    标签: java android retrofit2 rx-java2


    【解决方案1】:

    类似的东西-

    Observable.fromIterable(holders)
      .concatMap(holder -> {
        Observable.fromIterable(holder.images)
          .flatMap(image -> {
            // decode bitmap here
            uploadImage(bitmap)
            .map(url -> {
              image.url = url;
              return image;
            });
          })
          .toList()
          .map(list -> {
            holder.images = list;
            return holder;
          });
      })
      .toList(); // optional, if you need holders as a list
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-14
      • 1970-01-01
      • 1970-01-01
      • 2018-12-21
      • 2020-06-11
      • 2017-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多