最新消息:文章中包含代码时,请遵守代码高亮规范!

OKhttpUtils的一个简单封装【原创】

Android 李, 泰愚 336浏览 0评论

公司Android项目一直用的是OKhttpUtils框架,用起来确实挺方便好用,但是针对项目的api给的数据,在解析的过程中,往往有些是可以提出来作为公共代码的,比如返回Json数据的第一层,Message和errorCode,所以想针对这样的api数据,将重复的解析代码提出来放在一个工具类中,具体的页面业务逻辑数据,再具体的解析。

所以写了一个工具类,有静态方法如下:

/**
 * 普通请求api-get
 * @param mContext Context
 * @param url API
 * @param params 参数
 * @param key 特殊的key 不用则传空
 * @param callBack 具体处理的回调
 */
public static void getData(final Context mContext, String url, Map<String, String> params, String key, final ApiCallBack callBack) {
    OkHttpUtils.get().url(url).params(params).build().execute(new StringCallback() {
        @Override
        public void onError(Call call, Exception e, int id) {
            ToastUtils.show(mContext, "服务器异常");
        }

        @Override
        public void onResponse(String response, int id) {
            JsonData jsonData = JsonData.create(response);
            String errorCode = jsonData.optString("errorCode");
            String message = jsonData.optJson("message").optString("message");

            if ("0".equals(errorCode)) {
                JsonData data = jsonData.optJson("data");
                if (callBack != null) {
                    callBack.dealData(data);
                }

            } else if ("-1".equals(errorCode)) {
                ToastUtils.show(mContext, message);
                PreferenceHelper.write(mContext, SPConstants.SHARED_PREFERENCE_NAME,
                        SPConstants.HAS_LOGGED, false);
                PreferenceHelper.write(mContext, SPConstants.SHARED_PREFERENCE_NAME,
                        SPConstants.USER_TYPE, "");
                Bundle bundle = new Bundle();
                bundle.putString("from", "-1");
                Intent intent = new Intent(mContext, LoginActivity.class);
                intent.putExtras(bundle);
                mContext.startActivity(intent);
            } else {
                ToastUtils.show(mContext, message);
            }
        }
    });
}
这里的参数有上下文Context,需要请求的Api的url,需要传递的参数Map,预留一个key,以防有特殊的解析需要,另外就是一个回调接口ApiCallBack,如下:
public interface ApiCallBack {

    void dealData(JsonData data);

}
这里当OKhttpUtils请求完成后,在OnError方法里弹出提示,这里的处理方式可以自定义,在onResponse方法中,因为业务需要,其中几层解析都是固定的,包括errorCode为-1的操作,只是在errorCode为0时,data层有所不同,所以将data通过回调接口返回,在具体的页面进行处理。
当然这里只是一个实例,比如errorCode如果有更多的需求和自定义意义,则也可以多些几个回调接口,进行回调处理。而使用的时候,则是这样:

private void getData() {
    Map<String, String> map = new HashMap<>();
    map.put("user_type", PreferenceHelper.readString(mContext, SPConstants.SHARED_PREFERENCE_NAME, SPConstants.USER_TYPE, ""));
    ApiUtil.getData(mContext, Url.ALIPAY_ACCOUNT_LIST + getToken(), map, "", new ApiCallBack() {
        @Override
        public void dealData(JsonData data) {
            //具体解析处理   
        } 
    );
}

转载时请注明出处及相应链接,本文永久地址:https://blog.yayuanzi.com/24142.html


pay_weixin
pay_weixin
微信打赏
pay_weixin
支付宝打赏
感谢您对作者rick的打赏,我们会更加努力!    如果您想成为作者,请点我

您必须 登录 才能发表评论!