首页 文章

Retrofit2 RxJava2全局处理错误

提问于
浏览
0

如何使用retrofit2和rxjava2检查网络连接并且服务器是否可用于所有请求?

我可以通过向我的服务器URL发送请求来检查“服务器可用”,但是我可以通过向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());

如何检查我写的所有请求的这些错误,以免重复代码?谢谢 .

2 回答

  • 0

    您可以使用 lift 方法,它允许您为您的案例实现自己的运算符ApiErrorOperator

    并使用如下:

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

    在应用程序类的 onCreate 中调用 RxJavaPlugins.setErrorHandler . 例如:

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

相关问题