使用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

回到顶部