[英]How to retry in RxJava2 only when the response is a 404
我使用帶有Retry的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())
您可以使用其他形式的retry()
有條件地重試。
...
.retryWhen( error -> error.flatMap( responseType -> checkResponseType( responseType ) ) )
...
接着
Observable<Boolean> checkResponseType( ResponseException response ) {
if ( response.getCode() == 404 ) {
return Observable.error( response );
}
return Observable.just( Boolean.TRUE );
}
這將監視您收到的錯誤響應並檢查404值。 如果是404,則不會重試,否則會重試。
多虧了Bob的幫助,我得以使用他的響應和這個響應( 來自Throwable-Android的錯誤代碼 )使事情得以解決。 這是使用Throwable的最終解決方案。 我刪除了
.retry(3)
並且我添加了鮑勃的建議。 並且被調用的函數被替換為使用Throwable而不是ResponseException
private static Observable<Boolean> checkResponseType( Throwable response ) {
if ((response instanceof HttpException) && ((HttpException) response).code() == 404) {
return Observable.error(response);
}
return Observable.just(Boolean.TRUE);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.