1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/Jlanglang-JRxRetrofit

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
README.md 8.8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 03:18 152cd41

Это перевод текста на русский язык:

JRxRetrofit

Это оболочка для сетевого фреймворка, основанная на rxjava2 и retrofit2. Цель — быстрая разработка и быстрая настройка.

Зависимости:

implementation 'com.github.Jlanglang:JRxRetrofit:1.0.6'

Добавьте в корневой build.gradle:

repositories {
    maven { url 'https://jitpack.io' }
}

Использование:

Сначала необходимо выполнить:

NetWorkManager.init(String baseUrl, Application context)

Затем нужно определить собственные правила basebean:

NetWorkManager.addParseInfo(
        new ParseInfo("code", "data", "msg", "200") // 200 означает успешный код.
);

ParseInfo:

public ParseInfo(String codeKey, String dataKey, String msgKey, String successCode) {
        this.codeKey = codeKey;
        this.dataKey = dataKey;
        this.msgKey = msgKey;
        this.successCode = successCode;
    }
    ...

ParseInfo эквивалентен формату вашего basebean, то есть правилам возврата интерфейса:

class BaseBean<T>{
  String code;
  T data;
  String msg;

}

Однако этот фреймворк не требует использования BaseBean. Достаточно добавить ParseInfo, соответствующий вашим правилам интерфейса.

Как определить успешность запроса?

В ParseInfo по умолчанию сравниваются значения successCode и codeKey.

 public boolean isSuccess(JsonObject asJsonObject) {
        if (checkSuccess != null) {
            return checkSuccess.isSuccess(asJsonObject);
        }
        String code = asJsonObject.get(codeKey).toString();
        return TextUtils.equals(code, successCode);
    }

Как настроить проверку успешности запроса?

Можно использовать setCheckSuccess(). Не обязательно, но полезно для расширения функциональности.

new ParseInfo("code", "data", "msg", "200").
setCheckSuccess(new RxParseInfo.CheckSuccess() {
                @Override
                public boolean isSuccess(JsonObject asJsonObject) {
                    return false;
                }
            })

Инициализация:

public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        NetWorkManager.init("https://api.apiopen.top/", this);
        NetWorkManager.initKey("私钥", "公钥");// шифрование и дешифрование
        NetWorkManager.setDefaultRetry(5);// количество попыток
        NetWorkManager.setDefaultTimeOut(20);// секунд
        NetWorkManager.addParseInfo(
                new ParseInfo("code", "result", "message", "200")
        );
        NetWorkManager.setExceptionListener(new onExceptionListener() {
            @Override
            public String onError(Throwable throwable) {
                if (throwable instanceof NullPointerException) {

                }
                if (throwable instanceof NetworkErrorException) {

                }
                if (throwable instanceof SocketException) {
                    
                }
                return null;
            }
        });
        NetWorkManager.setApiCallBack(new APICallBack() {
            @Override
            public String callback(String code, String msg, String resultData) {
               if (code.equals("100")) {
                    // переход на страницу входа
                    return "срок действия логина истёк";
                }
                return msg;
            }
        });
    }
}

Логика обработки исключений:

        String errorMsg = null;
        // получение зарегистрированного обратного вызова через код.
        APICallBack apiCallback = NetWorkManager.getApiCallback();
        if (apiCallback != null) {
            String callbackMsg = apiCallback.callback(code, response);
            if (!TextUtils.isEmpty(callbackMsg)) {
                errorMsg = callbackMsg;
            }
        }
        // если callback не обрабатывает, возвращает сообщение сервера.
        if (TextUtils.isEmpty(errorMsg)) {
            errorMsg = msg;
        }
        // выбрасывает исключение, переходит к onError.
        throw new APIException(code, errorMsg);

Обработка сообщений об исключениях:

Здесь используется перечисление для обработки сообщений об исключениях.

public enum JErrorEnum implements Consumer<Throwable> {
    normal(0), toast(1);

    private int type;

    JErrorEnum(int type) {
        this.type = type;
    }

    public static void normal(Throwable throwable) {
        normal.accept(throwable);
    }

    public static void toast(Throwable throwable) {
        toast.accept(throwable);
    }

    @Override
    public void accept(Throwable throwable) {
        String errMsg = "";
        Class<? extends Throwable> throwableClass = throwable.getClass();
``` ```
Обработка Api пользовательских исключений, запрос успешен. Если требуется специальная обработка, используйте APICallBack

    if (throwableClass.equals(APIException.class)) {
        errMsg = throwable.getMessage();
    }

    // Обработка error исключения, http исключения
    onExceptionListener exceptionListener = NetWorkManager.getExceptionListener();
    if (exceptionListener != null) {
        errMsg = exceptionListener.onError(throwable);
    }
    if (type == 1 && !TextUtils.isEmpty(errMsg)) {
        Toast.makeText(NetWorkManager.getContext(), errMsg, Toast.LENGTH_SHORT).show();
    }
}

Вы можете использовать следующие способы:

  • SimpleObserver
    • normal — по умолчанию обрабатывает только логику исключений и не отображает сообщения.
@Override
public void onError(Throwable e) {
    JErrorEnum.normal(e);
}
  • ToastObserver
    • toast — отображает сообщение.
@Override
public void onError(Throwable e) {
    JErrorEnum.toast(e);
}
  • Прямое использование
Disposable subscribe = JApiImpl.with(this)
                .get("", SimpleParams.create())
                .compose(JRxCompose.obj(Login.class))
                .subscribe(login1 -> {

                }, JErrorEnum.toast);

Если вы не используете JErrorEnum, то настройки ниже будут недействительны. Обратите внимание, что один запрос не должен повторяться.

Настройка глобального обратного вызова для исключений

NetWorkManager.setExceptionListener(new onExceptionListener() {
            @Override
            public String onError(Throwable throwable) {
                return null;
            }
        });

Простой пример:

// Не используем JApiImpl
Disposable login = RetrofitUtil.getApi(JApi.class)
              .get("/login", SimpleParams.create()
                      .putP("key1", 1)
                      .putP("key2", 2)
                      .putP("code3", 2)
                      .putP("key4", 3)
              )
              .compose(JRxCompose.normal())
              .subscribe(new Consumer<String>() {
                  @Override
                  public void accept(String s) throws Exception {
  
                  }
              }, JErrorEnum.toast);

// Используем SimpleObserver, анализируем возвращаемый объект типа Object
JApiImpl.with(this)
          .post("/Login", SimpleParams.create())
          .compose(JRxCompose.obj(Login.class))
          .subscribe(new SimpleObserver<Login>() {
              @Override
              public void call(Login login) {
  
              }
          });

// Используем ToastObserver, анализируем возвращаемое значение типа List
JApiImpl.with(this)
          .post("/Login", SimpleParams.create())
          .compose(JRxCompose.array(Login.class))
          .subscribe(new ToastObserver<List<Login>>() {
              @Override
              public void call(List<Login> logins) {
  
              }
          });

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/Jlanglang-JRxRetrofit.git
git@api.gitlife.ru:oschina-mirror/Jlanglang-JRxRetrofit.git
oschina-mirror
Jlanglang-JRxRetrofit
Jlanglang-JRxRetrofit
master