我在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和Kotlin的新手,我对它有一些概念。 我知道错误是很明显的。所以我知道缺少了什么,但我不知道的是如何处理这个错误。 我尝试添加:,但仍显示相同的错误消息。
我正在使用较新的RX java,而不是 如果一切正常的话,这段代码几乎可以完美地工作。但如果我故意犯了个错误,比如我关掉了WiFi。而不是改型获得“UnknownHostException”...因为它应该发生在try catch块中的reverfit调用(getUser)中。但它没有将错误处理到onError(Throwable t)-->(我可以处理的地方),而是使应用程序崩溃。这就像错误从未
我正在尝试将一个向服务器发送消息的异步任务迁移到RxJava。该任务大致执行以下操作: 1) 创建将要发送的消息(保存到数据库) 2)向用户显示消息(状态为“发送”) 3)将消息发送到服务器(下面的代码段) 4)将消息标记为已发送或失败(保存到数据库) 5)更新UI 我创建了所需的Rx链,部分如下所示: 当我订阅上述内容时,我会得到一个一次性的。通常,我会将其添加到CompositeDisposa
我目前正试图把精力放在RxJava上,但我在以优雅的方式处理服务调用异常方面遇到了一点麻烦。 基本上,我有一个(改型)服务,它返回一个。的定义如下: 现在,我想要的是将该泛型响应映射到data JsonElement字段中包含的(我假设您不关心对象的外观,所以我不会用它污染文章)。下面的代码对于success案例非常有效,但是我找不到一个很好的方法来处理我的API异常: 有没有更好的办法做到这一点
我正在实现spring批处理作业,用于使用分区方法处理一个DB表中的数百万条记录,如下所示- > 从分区器中的表中提取唯一的分区代码,并在执行上下文中设置相同的代码。 创建一个包含读取器、处理器和写入器的块步骤,以基于特定分区代码处理记录。 是否可以创建分区/线程来处理像thread1进程1-1000,thread2进程1001-2000等? 如何控制创建的线程数,因为分区代码可以是100个左右,
我有3个EditText字段,我为这些字段创建了3个可观察对象。 当这三个字段都有值时,我想启用一个按钮。用户可以在字段中按任意顺序输入值。我该怎么做? 我用zip实现了这一点。 当我在所有三个文本字段中输入某个内容时,上面的这种情况就会起作用。e、 g.我在所有三个文本字段中输入了1个字符,然后按钮将被启用。但当我删除这三个字段中的任何一个字符时。zip不会被调用,因为它将等待其他2个文本字段流