Android 使用RxJava处理磁盘缓存和网络的分页
使用RxJava处理脱机和联机分页是否有好的模式。目前,我正在使用这个模式,代码看起来很脏。我想做的是第1页离线=>第1页在线=>第2页离线=>第2页在线..等等。直到最后一页。每次离线通话都会添加到列表中,在线通话将更新页面中的项目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
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);
}