Retrofit2 + RxJava2 Глобальные ошибки обработки - PullRequest
0 голосов
/ 20 октября 2018

Как проверить сетевое соединение и доступен ли сервер для всех запросов, используя 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 голосов
/ 20 октября 2018

Вы можете использовать lift метод, который позволит вам реализовать свой собственный оператор для вашего случая ApiErrorOperator

И использовать его следующим образом:

@Override
  public @NonNull Observable<List<Category>> fetchCategories() {
    return this.service
      .categories()
      .lift(apiErrorOperator())
      .map(CategoriesEnvelope::categories)
      .subscribeOn(Schedulers.io());
  }
0 голосов
/ 20 октября 2018

Позвоните RxJavaPlugins.setErrorHandler в onCreate вашего класса приложений.Например:

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