Last active
March 5, 2018 04:04
-
-
Save roana0229/8deada9b480e6c1def65bd202608d64d to your computer and use it in GitHub Desktop.
RxJava再帰処理でページング式のエンドポイントを全件取得する方法案
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private void main() { // このメソッドが最初に呼ばれるとして | |
Completable.create(new CompletableOnSubscribe() { | |
@Override | |
public void subscribe(CompletableEmitter emitter) throws Exception { | |
fetchAll(emitter, 20, 0); | |
} | |
}); | |
} | |
// 適当な通信処理 | |
private io.reactivex.Single<ListResults<Model>> fetchModel(int limit, int offset) { | |
return io.reactivex.Single.create(new SingleOnSubscribe<ListResults<Model>>() { | |
@Override | |
public void subscribe(SingleEmitter<ListResults<Model>> emitter) throws Exception { | |
... | |
} | |
}); | |
} | |
// 再帰呼び出しして、全件取得したらemitterで通知 | |
private void fetchAll(final CompletableEmitter emitter, int limit, int offset) { | |
fetchModel(limit, offset) | |
.subscribeWith(new DisposableSingleObserver<ListResults<Model>>() { | |
@Override | |
public void onSuccess(ListResults<Model> results) { | |
if (results.getTotalResults() > results.getStartIndex() + results.getItemsPerPages()) { | |
// まだ全部取得していない | |
fetchAll(emitter, 20, results.getStartIndex() + results.getItemsPerPages()); | |
} else { | |
// 全部取得した | |
emitter.onComplete(); | |
} | |
} | |
@Override | |
public void onError(Throwable e) { | |
emitter.onError(e); | |
} | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment