使用RxJava处理分页
我在Android应用程序上使用Retrofit + RxJava,并问自己如何处理API分页以链接调用,直到检索到所有数据。是这样的:
Observable<ApiResponse> getResults(@Query("page") int page);
所述ApiResponse对象具有简单的结构:
class ApiResponse { int current;
Integer next;
List<ResponseObject> results;
}
API将返回下一个值,直到最后一页。
有一些好的方法可以做到这一点吗?试图结合一些flatMaps(),但没有成功。
回答:
您可以递归建模:
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));
}
});
}
然后,要消耗它,
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将按顺序到达,并且很可能以页面大小的块到达。
以上是 使用RxJava处理分页 的全部内容, 来源链接: utcz.com/qa/420742.html