Это перевод текста на русский язык:
Это оболочка для сетевого фреймворка, основанная на 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();
}
}
Вы можете использовать следующие способы:
normal
— по умолчанию обрабатывает только логику исключений и не отображает сообщения.@Override
public void onError(Throwable e) {
JErrorEnum.normal(e);
}
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 )