美文网首页
RxEasyHttp网络库自定义数据结构(七)

RxEasyHttp网络库自定义数据结构(七)

作者: zhou_you | 来源:发表于2017-06-10 13:29 被阅读514次

    github源码地址:https://github.com/zhou-you/RxEasyHttp

    自定义ApiResult

    本库中默认提供的是标准ApiResult.内部是靠ApiResult进行解析的,如果你的数据结构跟ApiResult不同,你可以在你的项目中继承ApiResult,然后重写getCode()、getData()、getMsg()和isOk()等方法来实现自己的需求。
    本库中ApiResult如下:

    public class ApiResult<T> {
        private int code;
        private String msg;
        private T data;
        public int getCode() {
            return code;
        }
    
        public void setCode(int code) {
            this.code = code;
        }
    
        public String getMsg() {
            return msg;
        }
    
        public void setMsg(String msg) {
            this.msg = msg;
        }
    
        public T getData() {
            return data;
        }
    
        public void setData(T data) {
            this.data = data;
        }
    
        public boolean isOk() {//请求成功的判断方法
            return code == 0 ? true : false;
        }
    }
    

    json格式类似:

    {
    "code": 100010101,
    "data": 内容,
    "msg": "请求成功"
    }
    

    假如你的数据结构是这样的:

    {
    "error_code": 0,
    "result": 内容,
    "reason": "请求成功"
    }
    

    那么你的basebean可以写成这样

    public class CustomApiResult<T> extends ApiResult<T> {
        String reason;
        int error_code;
        //int resultcode;
        T result;
        @Override
        public int getCode() {
            return error_code;
        }
        @Override
        public void setCode(int code) {
            error_code = code;
        }
        @Override
        public String getMsg() {
            return reason;
        }
        @Override
        public void setMsg(String msg) {
            reason = msg;
        }
        @Override
        public T getData() {
            return result;
        }
        @Override
        public void setData(T data) {
            result = data;
        }
       /* @Override
        public boolean isOk() {
            return error_code==200;//如果不是0表示成功,请重写isOk()方法。
        }*/
    }
    

    那么你的网络请求可以这样写

    EasyHttp.get(url)
                    .readTimeOut(30 * 1000)//局部定义读超时
                    .writeTimeOut(30 * 1000)
                    .connectTimeout(30 * 1000)
                    //.cacheKey(this.getClass().getSimpleName()+"11")
                    //.cacheMode(CacheMode.CACHEANDREMOTE)
                    //.cacheMode(CacheMode.ONLYREMOTE)
                    //.headers("","")//设置头参数
                    //.params("name","张三")//设置参数
                    //.addInterceptor()
                    //.addConverterFactory()
                    //.addCookie()
                    //.timeStamp(true)
                    .baseUrl("http://apis.juhe.cn")
                    .params("phone", "手机号")
                    .params("dtype", "json")
                    .params("key", "5682c1f44a7f486e40f9720d6c97ffe4")
                    .execute(new CallBackProxy<CustomApiResult<ResultBean>, ResultBean>(new SimpleCallBack<ResultBean>() {
                        @Override
                        public void onError(ApiException e) {
                            //请求错误
                        }
    
                        @Override
                        public void onSuccess(ResultBean response) {
                            //请求成功
                        }
                    }) {
                    });
    

    这种写法会觉得有点长,CallBackProxy的泛型参数每次都需要填写,其中CustomApiResult是继承ApiResult的,CustomApiResult相当于项目的basebean,对于一个实际项目来讲,basebean是固定的,所以我们可以继续封装这个方法,根据需要一般只需要封装get和post请求就可以了。

     public static <T> Subscription customExecute(CallBack<T> callBack) {
            return execute(new CallBackProxy<CustomApiResult<T>, T>(callBack) {
            });
        }
    

    通过以上改造,再次调用时直接使用CallBack,不用再关注CallBackProxy,是不是明显简单很多了,具体请看代码github Demo!!!

    相关文章

      网友评论

          本文标题:RxEasyHttp网络库自定义数据结构(七)

          本文链接:https://www.haomeiwen.com/subject/sdgqqxtx.html