簡體   English   中英

Retrofit2 + RxJava2全局處理錯誤

[英]Retrofit2 + RxJava2 Global handling errors

如何使用Retrofit2和rxjava2檢查網絡連接以及服務器是否可用於所有請求?

我可以通過向服務器網址發送請求來檢查“服務器可用”,但是我可以通過向google.com或另一個“良好”網站發送請求來檢查網絡連接嗎?

我有更多的api請求,例如其中之一:

compositeDisposable.add(RetrofitClient
            .getApi()
            .somemethod()
            .map(response -> {
                Data data = null;
                if (response.isSuccessful()) {
                    data = response.body();
                } else {
                    data = new Data();
                    data.setResponseCode(response.code())
                }
                return data;
            })
            .onErrorReturnItem(new Data())
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(this::checkResponse());

為了不重復代碼,如何檢查所有請求的這些錯誤? 謝謝。

在應用程序類的onCreate中調用RxJavaPlugins.setErrorHandler 例如:

    RxJavaPlugins.setErrorHandler(e -> {
        if ((e instanceof IOException) || (e instanceof SocketException)) {
            // handle exception
            return;
        }
    });

您可以使用lift方法,該方法允許您為案例ApiErrorOperator實現自己的運算符

並按如下所示使用它:

@Override
  public @NonNull Observable<List<Category>> fetchCategories() {
    return this.service
      .categories()
      .lift(apiErrorOperator())
      .map(CategoriesEnvelope::categories)
      .subscribeOn(Schedulers.io());
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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