avi*_*mez 2 java retrofit rx-java2
我使用 Retrofit 和 RxJava2 实现了一个重试调用,但是我需要它仅在您获得与 404 不同的代码时重试。重试 404 是没有意义的。这就是我正在使用的
new RequestFactory()
.requestBuilder
.create(Service.class)
.getData(id)
.map(response -> response.object)
.doOnError(t -> Log.e(NET, "Error fetching data id '" + id + "': " + t))
.retry(3)
.onErrorResumeNext(Observable.empty())
.subscribeOn(Schedulers.io())
Run Code Online (Sandbox Code Playgroud)
您可以使用另一种形式retry()来有条件地重试。
...
.retryWhen( error -> error.flatMap( responseType -> checkResponseType( responseType ) ) )
...
Run Code Online (Sandbox Code Playgroud)
进而
Observable<Boolean> checkResponseType( ResponseException response ) {
if ( response.getCode() == 404 ) {
return Observable.error( response );
}
return Observable.just( Boolean.TRUE );
}
Run Code Online (Sandbox Code Playgroud)
这将监视您收到的错误响应并检查 404 值。如果是404,则不会重试,否则会重试。
| 归档时间: |
|
| 查看次数: |
1946 次 |
| 最近记录: |