我在Android应用程序中使用Retrofit和RxJava进行通信,并且必须处理从似乎正常的HTTP响应(状态200代码)解析响应时出错.
我还使用retryWhen运算符实现了一种处理错误的方法,该运算符连接到用户的输入以决定是否重试.这可以通过重新订阅原始的Observable来实现.
我尝试的第一种方法是这样的:
services.getSomething()
.map(response -> {
if (checkBadResponse(response)) {
throw new RuntimeException("Error on service");
} else {
return parseResponse(response);
}
}).retryWhen(this::shouldRetry);
有了这个,服务不会再被调用.看来retryWhen运算符无法重新订阅服务的Observable.
最终的工作是实现另一个操作符,该操作符不发送onCompleted向前并使用升降机,如下所示:
public class CheckResponseStatus
使用它像:
services.getSomething()
.lift(new CheckResponseStatus())
.map(response -> parseResponse(response))
.retryWhen(this::shouldRetry);
最佳答案