Показать ошибку нет интернета используя Retrofit 2 и RxJava

для получения данных с сервера использую вот такой запрос:

   public void getContactDataTechnicalSupport(String country) {
         compositeDisposable = new CompositeDisposable();
         ApiFactory apiFactory = ApiFactory.getInstance();
         ApiService apiService = apiFactory.getApiService();

         Disposable disposable = apiService.getContactDataTechnicalSupport(country)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(response -> {
                if (response.getSuccess())
                    view.setTechSupportData(response);
                else
                    view.showErrorRequestSupportContact(response.getCode(), response.getMessage());
              }, throwable -> {
                    view.showErrorRequestSupportContact(0, "Ошибка подключения");
              });
          compositeDisposable.add(disposable);
    }

Мне нужно показать пользователю что у него нет интернета, данный запрос показывает это сообщение даже если ошибка на сервере, что не совсем корректно, как мне можно обработать ошибку чтобы показать сообщение?


Ответы (1 шт):

Автор решения: Pavlo Pavlov

Решил это вот так:

    apiService.getContactDataTechnicalSupport(country)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(response -> {
                if (response.getSuccess())
                    view.setTechSupportData(response);
                else
                    view.showErrorRequestSupportContact(response.getCode(), response.getMessage());
            }, throwable -> {
                if (throwable instanceof SocketTimeoutException || throwable instanceof UnknownHostException)
                    view.showErrorRequestSupportContact(NO_INTERNET_CODE, "Нет интернета");
                else
                    view.showErrorRequestSupportContact(0, "Ошибка подключения");
            });
→ Ссылка