手柄带RxJava分页 [英] Handle Paging with RxJava
本文介绍了手柄带RxJava分页的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用的是改造+ RxJava在Android的应用程序,我问自己如何处理的API分页链的呼叫,直到所有数据被检索到。是这样的:
I'm using Retrofit + RxJava on an Android app and am asking myself about how to handle the API pagination to chain calls until all data is being retrieved. Is something like this:
Observable<ApiResponse> getResults(@Query("page") int page);
的 ApiResponse 的对象有一个简单的结构:
The ApiResponse object has a simple structure:
class ApiResponse {
int current;
Integer next;
List<ResponseObject> results;
}
该API将直到最后一页返回的下一步值。
有一些实现这个好办法?尝试结合一些的 flatMaps()的,但没有成功。
There's some good way to achieve this? Tried to combine some flatMaps(), but had no success.
推荐答案
您可以递归模型是:
Observable<ApiResponse> getPageAndNext(int page) {
return getResults(page)
.concatMap(new Func1<ApiResponse, Observable<ApiResponse>>() {
@Override
public Observable<ApiResponse> call(ApiResponse response) {
// Terminal case.
if (response.next == null) {
return Observable.just(response);
}
return Observable.just(response)
.concatWith(getPageAndNext(response.next));
}
});
}
然后,要使用它,
Then, to consume it,
getPageAndNext(0)
.concatMap(new Func1<ApiResponse, Observable<ResponseObject>>() {
@Override
public Observable<ResponseObject> call(ApiResponse response) {
return Observable.from(response.results);
}
})
.subscribe(new Action1<ResponseObject>() { /** Do something with it */ });
这应该让你 ResponseObject
流将在顺序到达,并在页面大小的块最有可能到达。
That should get you a stream of ResponseObject
that will arrive in order, and most likely arrive in page-size chunks.
这篇关于手柄带RxJava分页的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文