Treasure

Project Url: zengweitao/Treasure
Introduction: MVP+retrofit2+rxjava2+rxandroid+okhttp3+Lifecycle 的网络框架,结合了 Google 官方 AAC(Android Architecture Components),实现生命周期的管理
More: Author   ReportBugs   
Tags:

5.9 号新增 添加 token 过期自动刷新 token,刷新后再请求一次接口的功能; /**/

1.该框架为 MVP+retrofit2+rxjava2+rxandroid+okhttp3+Lifecycle 的网络框架,结合了 Google 官方 AAC(Android Architecture Components),实现生命周期的管理。

2.同时可以应对项目多个 BaseUrl 的网络请求,针对对接多业务方灵活取用

3.自定义拦截器,可以动态的设置请求头里的参数,对返回的 code 码做同一封装处理。同时对接口返回的 error,做统一处理,以下是错误的统一处理: public class ErrorHandler { private static String data = "{\"Success\": false,\"StatusCode\": 500,\"Message\": \"处理失败\", \"ErrorInfo\": {\"ErrorMessage\": \"网络请求错误\",\"ErrorCode\": \"404\" },\"Result\": null}";

public static TradeSimpleResult handle(Throwable throwable) {
    if (throwable instanceof HttpException) {
        HttpException error = (HttpException) throwable;
        try {
            String string = error.response().errorBody().string();
            if (isJSONValid(string)) {
                return new Gson().fromJson(string, TradeSimpleResult.class);
            } else {
                return new Gson().fromJson(data, TradeSimpleResult.class);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    } else {
        throwable.printStackTrace();
        return null;
    }
}

public static String errorMessage(Throwable e) {
    TradeSimpleResult errBody = ErrorHandler.handle(e);
    if (errBody != null) {
        final Activity activity = AppManager.topActivity();
        //用户类型
        final String userType = PreferenceHelper.readString(PreferenceHelper.DEFAULT_FILE_NAME, AppConfig.PREFER_IS_USERTYPE, "");
        String errorCode = errBody.getErrorInfo().getErrorCode();
        if (activity != null && !activity.isDestroyed()) {
            if ("401".equals(errorCode)) {
                //token 失效了
                try {
                    PreferenceHelper.write(PreferenceHelper.DEFAULT_FILE_NAME, AppConfig.PREFER_TOKEN_TAG, "");
                    DialogView dialogView = new DialogView(activity, 180, 180, R.layout.my_dialog, R.style.dialog) {
                        @Override
                        public void isdismiss(int tag) {
                            if (tag == DialogView.CANCEL_BUTTON_CLICK) {

// activity.startActivity(new Intent(activity, RoleChangeActivity.class)); } } }; dialogView.showdialog2("温馨提示", "登录失效,请重新登录", "去登录", ""); } catch (Exception es) { es.printStackTrace(); } } } return errBody.getErrorInfo().getErrorMessage(); } return ""; }

public final static boolean isJSONValid(String jsonInString) {
    try {
        return true;
    } catch (Exception e) {
        return false;
    }
}

}

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools