以下代码......
观察来自Android ViewPager的两个整数流(pageSelected,scrollState)。
结合&过滤流寻找某种组合。
如果找到,则执行网络呼叫。
消耗网络电话的结果。
1。 flatmap()/ concatmap()是下面代码链接Observables的唯一方法吗?(避免嵌套subscribe()调用)
2。使用observeOn()在平面代码中切换正确/直观的线程还是有更好的方法来做到这一点?(DataTools调用是异步的)
我发现在使用嵌套代码时,在Observable,Operator和Subscriber之间应用正确的线程会让人感到困惑。
public void loadNextAtTest4(final int pagesRemaining) {
ObservableCombineLatest.combineLatest(pageSelectObs, scrollStateObs, new BiFuncOnlyIdlePages()).filter(new Predicate<Integer>() {
@Override
public boolean test(@NonNull Integer page) throws Exception {
return page > -1 && pagesRemaining == page;
}
}).observeOn(Schedulers.io())
.flatMap(new Function<Integer, Observable<List<PageDescriptor>>>() {
@Override
public Observable<List<PageDescriptor>> apply(@NonNull Integer integer) throws Exception {
return DataTools.getNextPageBase(mRedClient, mFpxClient).toObservable();
}
}).observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<List<PageDescriptor>>() {
@Override
public void accept(@NonNull List<PageDescriptor> pageDescriptors) throws Exception {
mCPAdapter.appendDataset(pageDescriptors);
}
});
}
public void loadNextAtTest2(final int pagesRemaining) {
ObservableCombineLatest.combineLatest(pageSelectObs, scrollStateObs, new BiFuncOnlyIdlePages()).filter(new Predicate<Integer>() {
@Override
public boolean test(@NonNull Integer page) throws Exception {
return page > -1 && pagesRemaining == page;
}
}).observeOn(Schedulers.io())
.subscribe(new Consumer<Integer>() {
@Override
public void accept(@NonNull Integer page) throws Exception {
DataTools.getNextDataBase(mRedClient, mFpxClient)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<List<PageDescriptor>>() {
@Override
public void accept(@NonNull List<PageDescriptor> pageDescriptors) throws Exception {
mCPAdapter.appendDataset(pageDescriptors);
}
});
}
});
}