如何将RxJava代码改进为API和本地缓存?

问题描述 投票:0回答:1

我有此代码,可以从缓存中获取照片,然后再从API中获取照片。

Disposable disposable = photosCacheRepository.getPhotoAttachments(workOrderId)
          .subscribeOn(Schedulers.io())
          .observeOn(AndroidSchedulers.mainThread())
          .subscribe(photoAttachments -> {
            Disposable disposable1 = workOrdersRepository.getWorkOrderDetails(workOrderId)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(workOrderDetails -> {
                  List<PhotoAttachment> photos = new ArrayList<>();
                  photos.addAll(photoAttachments);
                  photos.addAll(workOrderDetails.getAppointmentOccurrence().getPhotoAttachments());
                  if (photos.isEmpty()) {
                    view.displayNoWorkOrderPhotos();
                  } else {
                    view.displayWorkOrderPhotos(photos);
                  }
                });

            disposables.add(disposable1);
          });

      disposables.add(disposable);

我如何改进此代码?我不想像我那样创建两个一次性用品。任何其他反馈或改进都值得欢迎。

android rx-java rx-java2
1个回答
1
投票

[有一个RxJava运算符可以突出您的需求。它称为flatMap(Marbles and operator info here)。

使用此功能强大的运算符,您可以获取第一个Observable的输出作为flatMap创建的输入的输入,然后将其作为Observable返回。

对不起,我不太习惯Java,因此下面的代码几乎可以肯定不会起作用,只是想出一个主意...

在您的示例中,您可以执行以下操作:

Disposable disposable = photosCacheRepository.getPhotoAttachments(workOrderId)
      .subscribeOn(Schedulers.io())
      .flatmap(photoAttachments -> {
         workOrdersRepository.getWorkOrderDetails(workOrderId)
            .ObserveOn(AndroidSchedulers.mainThread())
            .subscribe(workOrderDetails -> {
              List<PhotoAttachment> photos = new ArrayList<>();
              photos.addAll(photoAttachments);
              photos.addAll(workOrderDetails.getAppointmentOccurrence().getPhotoAttachments());
              if (photos.isEmpty()) {
                view.displayNoWorkOrderPhotos();
              } else {
                view.displayWorkOrderPhotos(photos);
              }...

我希望至少有帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.