簡體   English   中英

僅當響應為404時如何在RxJava2中重試

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM