Модифицированные + RxJava сетевых запросов обработки исключений

Эта статья основана дооснащения + RxJava сделать некоторые аккуратный пакет. Основное объяснение ошибки как только пакет просил информационную сеть , чтобы помочь нам разумно будет отображаться в интерфейсе пользовательского интерфейса на основе статуса вернулся. В сочетании с статьей для настройки дооснащения. RxJava + дооснащения в сеть запросов на использование пакета, в том числе обработки кэша, обработки исключений и других запросов, запрос на использование большинства сетевых условий, т.е. выдвижным использования. Вы можете перейти к нижней части адреса для загрузки коды.

Эта статья основана на RxJava 2.0 и 2.1 Модифицированные анализ.
Ниже перечислено добавлена специфическая зависимость.

 //引入okhttp
    compile 'com.squareup.okhttp3:okhttp:3.5.0'
    //引入retrofit
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    //引入rxjava
    compile 'io.reactivex.rxjava2:rxjava:2.0.4'
    //引入Log拦截器,方便DEBUG模式输出log信息
    compile 'com.squareup.okhttp3:logging-interceptor:3.5.0'
    //引入rxjava适配器,方便rxjava与retrofit的结合
    compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
    //引入json转换器,方便将返回的数据转换为json格式
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'
    //引入rxandroid
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'

Необходимость обработки исключений

Следующие эти ошибки в запросе сети через общий. Мы всплывающее сообщение может уведомить пользователя о ненормальности и удельной нагрузки через соответствующий интерфейс UI Toast. Кроме того, через конкретную информацию исключений, чтобы помочь нам во время проектов расследования в BUG.

[Изображение Не удалось загрузить ... (изображение-417991-1559564709706)]

Таким образом, вопрос становится, как мы определяем тип исключения?

Это с сервера, чтобы вернуться формат данных говорят.

Как правило, мы просим возвращение, как это

{
   "code":"200",
   "message":"Return Successd!",
   "data":{
         "name":"张三"
          "age":3
   }
}

Сервер возвращает данные , вероятно , более широко известный как согласованный формат. Значение Возможного зависимого кода представления коды не то же самое, это может взаимодействовать с серверной стороной персоналом, гибким изменением.
Не Базовая конфигурация больше не о дооснащения сказал, что я могу увидеть другую статью . Здесь подробно объяснить , как использовать упаковочную и возвращает ошибку сервера данных обработки информации RxJava.

Возвращение Упаковка суда типа данных и ненормальность

возвращаемые данные пакета
возвращают в код сервера данных мы хотим сделать некоторые определения, а не код 200 (предполагается , что сеть 200 указывает на то, что запрос успешно) будет сгенерировано исключение. Таким образом , мы создаем класс BaseResponse, соответствующий приведенные выше структуры данных.

public class BaseResponse<T> {

    private int code;
    private String msg;
    private T data;
//该方法假设服务器返回200表示成功返回结果,其他数字表示异常
    public boolean isOk() {
        return code ==200;
    }
//省略getter,setter方法
}

Это рассматривается как базовый класс для всех объектов, данные может быть любым типом данных.

Затем возвращает результат, который предварительно обрабатывают, новый ExceptionHandle. Предварительная обработка является не более чем верно , когда определяют , является ли или нет, когда нормальная обработка является истинной, в противном случае возникает исключение так ExceptionHandle дальнейшей обработки, которая определяет аномалию ненормальности в соответствии с обратным данным методом BaseResponse ISOK (). Давайте пропустить вперед логику, чтобы понять , как определить , что это ненормально?
Анализируя тип исключения

public class ExceptionHandle {
    //该方法用来判断异常类型 并将异常类型封装在ResponeThrowable返回
    public static ResponeThrowable handleException(Throwable e) {
          if (e instanceof HttpException) {
                  HttpException httpException = (HttpException) e;
                  ex = new ResponeThrowable(e, ERROR.HTTP_ERROR);
                  ex.message = "网络错误";
                  return ex;
          }
         ...................
         ...................其他类型异常判断
         ...................
     }
}

Детальный взгляд на исходном коде, будет размещен по следующему адресу.
По ExceptionHandle.handleException (Throwable е) возвращает исключение, тип исключения и несет определенную информацию.

Теперь мы уже знаем, как определить и как определить, производят больше, чем тип исключения. Далее вам нужно решить, как передать исключение из OnError наблюдателей (Throwable е) для обработки исключений.

Аномальная передача

Аномальный процесс передачи в проведении первого шага мы должны сначала определить, возвращает ли сервер данные ненормален, если данные не ненормальные данные возвращаются, если исключение. На этот раз включает в себя процесс преобразования данных для преобразования BaseResponse т.е. объектов в тип данных объекта, необходимо сопоставить оператор ().

(Observable<T>) upstream.map(new HandleFuc<T>())

HandleFuc , который реализует Function<BaseResponse<T>, T>интерфейс

 public static class HandleFuc<T> implements Function<BaseResponse<T>, T> {
        @Override
        public T apply(BaseResponse<T> response) throws Exception {
            //response中code码不为200 出现错误
            if (!response.isOk())
                //抛出异常,把状态码及状态描述信息传入
                throw new RuntimeException(response.getCode() + "" + response.getMsg() != null ? response.getMsg() : "");
            return response.getData();
        }
    }

Если исключение не появляется она не будет вторым шагом. Если происходит исключение, второй шаг необходим, т.е. ненормальное состояние определяется, то ExceptionHandle.handleException (Throwable, е) возвращение OnError ненормальное афферентные () обработки.

Фокус здесь: Вызывается, когда исключение должно быть прекращено onNext метод () и вызов метода () OnError. Если мы не будет продолжать обрабатывать, только через описанные выше действия, хотя он будет вызывать метод OnError (), но нет отклонений от нормы суждения, и метода не отмены onNext (). Есть ли хороший способ, то есть, вы можете отменить метод onNext (), который может достичь определения ненормальности в реализации, и вызывает метод OnError ()?

Такой мощный RxJava естественно этот путь, и onErrorResumeNext()мы сможем выполнить это требование. Для onErrorResumeNext(), это может быть просто понимать следующим образом : При возникновении ошибки, быть заменен другим Наблюдаемые Наблюдаемые тока и продолжать передавать данные.

onErrorResumeNext()Эти параметры могут быть переданы в интерфейсе функции. Таким образом, мы можем генерировать функции Observable, логику выполнения определения ненормальности Observable и вызывает метод OnError ().
Конкретные достижения следующих действий :

(Observable<T>) upstream.map(new HandleFuc<T>()).onErrorResumeNext(new HttpResponseFunc<T>());

public static class HttpResponseFunc<T> implements Function<Throwable, Observable<T>> {
        @Override
        public Observable<T> apply(Throwable throwable) throws Exception {
            return Observable.error(ExceptionHandle.handleException(throwable));
        }
    }

В этот момент мы поняли , что определение ненормальности логики и доставку. Так что мы можем извлечь конкретную информацию о методе OnError ненормального состояния (), соответствующей обработке.
Процесс идет о: отображение (преобразование) типа данных, и обнаружения аномалий. Если все в порядке, возвращаемый тип данных данных. Если не нормально, onErrorResumeNext () определяет тип исключения и исключения проходят
ниже показывают простые визуализации:

Закройте выше сети. При инициализации сетевого запроса, нет сети не будет сгенерировано исключение, а затем обнаружить конкретные ненормальным, Toast подсказывает тип исключения, пользователь будет знать, что пошло не так.

В связи с этой статьей , чтобы настроить дооснащение. RxJava + дооснащения в сеть запросов на использование пакета, в том числе обработки кэша, обработки исключений и других запросов, запрос на использование большинства сетевых условий, т.е. выдвижным использования. Вы можете перейти по следующему адресу для загрузки коды.
код адрес

Она занимается разработкой инженеров Android в течение семи лет, многие люди спрашивают меня в частном порядке, 2019 Android как передовые науки, не существует никакого метода?

Да, в начале я провел больше месяца , чтобы разобраться в учебные материалах, в надежде помочь тем , кто хочет повысить опережающее развитие Android, но не знаю , как обучаемые друзья. [ В том числе передового интерфейса, оптимизации производительности, архитектор курсов, NDK, Котлин, гибридные разработки (ReactNative + Weex), Flutter и другая технической информация архитектура ], в надежде помочь пересмотреть ваши предварительные интервью и найти хорошую работу, но и сохранить времени они ищут информацию в Интернете , чтобы узнать.

Получение: Добавить Android архитектура обмен QQ групповой чат: 513 088 520, в группу, которая должна получить информацию! ! !

Нажмите на ссылку , чтобы присоединиться к группе чата Android мобильной архитектуры [все население]: групповой чат

первоисточников

рекомендация

отblog.csdn.net/weixin_43351655/article/details/90758440