Android 使用RxJava处理磁盘缓存和网络的分页

Android 使用RxJava处理磁盘缓存和网络的分页,android,pagination,rx-java,Android,Pagination,Rx Java,使用RxJava处理脱机和联机分页是否有好的模式。目前,我正在使用这个模式,代码看起来很脏。我想做的是第1页离线=>第1页在线=>第2页离线=>第2页在线..等等。直到最后一页。每次离线通话都会添加到列表中,在线通话将更新页面中的项目 public void loadData() { paginator = PublishSubject.create(); paginator.concatMap(new Function<Integer, ObservableSourc

使用RxJava处理脱机和联机分页是否有好的模式。目前,我正在使用这个模式,代码看起来很脏。我想做的是第1页离线=>第1页在线=>第2页离线=>第2页在线..等等。直到最后一页。每次离线通话都会添加到列表中,在线通话将更新页面中的项目

  public void loadData() {
    paginator = PublishSubject.create();
    paginator.concatMap(new Function<Integer, ObservableSource<Response>>() {
      @Override public ObservableSource<Response> apply(Integer integer)
          throws Exception {
        Request request = new Request();
        request.page = integer;
        return NetworkRequestManager.getInstance()
            .getData(request)
            .subscribeOn(Schedulers.newThread());
      }
    })
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new ResponseSubscriber());

    mEndlessRecyclerAdapter.onDataReady(true);
  }

正如您所看到的,OnDataLoaded方法中有很多样板文件。是否有更好或推荐的方法来减少样板文件?

您找到了一个干净的解决方案吗?我发现使用相同的解决方案有困难吗?
  public Observable<Response> getData(final Request request) {

    return dataService.getOnlineData(request)
        .publish(networkResponse ->  Observable.merge(networkResponse, dataService.getOfflineData(request).takeUntil(networkResponse)));
  }
 @Subscribe public void onDataLoaded(Response response) {

    if (response.getCurrentPage() == 1) {
      mAdapter.setItemList(items);
    } else if (!response.data.isEmpty()) {
      if (response.isFromOffline) {
        mAdapter.addItemList(response.data);
        wasOfflineEmpty = false;
      } else if (wasOfflineEmpty) {
        mAdapter.addItemList(response.data);
      } else {
        mAdapter.updateItemList(response.data);
      }
    } else if (response.data.isEmpty() && response.isFromOffline) {
      wasOfflineEmpty = true;
    }
    mEndlessRecyclerAdapter.onDataReady(response.data.size() != 0);
  }