Android开发truck快速开发框架OKHttp(七)

简介

truck项目的github地址: https://github.com/hookYuan/Truck
网络操作其中最主要的就是Http操作,而在Android平台大家几乎默认都使用OKHttp,去年特别火的Retrofit+Rxjava+OKHttp的方式也仅仅是在OKHttp的基础上加入了Rxjava做线程切换、使用Rtrofit采用注解的方式来生成参数。为了简化联网操作,和适应公司的联网框架特殊需求,我在truck框架中封装了两种联网方式供大家选择:
  • 方案一、Retrofit+Rxjava+OKHttp+Gson
  • 方案二、Rxjava+OKHttp+Gson

示例

首先说一下OKHttpUtil的简单用法。OKHttpUtil有两种基本使用方式,第一种单例模式,另一种为普通模式。单例模式的好处在于可以统一配置公共参数,例如为所有请求统一配置请求头token。统一配置如下,建议在Application中初始化。
//配置全局OkHttp联网参数
        String sessionid = (String) SPUtil.get(mContext, Config.SESSIONID, "");
        OKHttpConfig config = OKHttpConfig.create()
                .commonHead(sessionid != null ? sessionid : "")
                .commonHeadKey("sessionId")
                .connectTimeout(7 * 1000l) //连接超时设置
                .readTimeoutMills(7 * 1000l)
                .mContext(mContext)
                .isReConnection(false).build();
        OKHttpUtil.init(config);
如需使用静态OKHttpUtil则需要以上配置,否则不需要。OKHttpUtil封装了Json的智能解析,如需使用,请先配置json的基本格式。默认格式如下:
public class NetBean<T> {

    protected T data;
    /**
     * code : 200
     * message : null
     * data : eb3968cc-0f64-4b58-9406-a7e51a5bbcad
     */
    private int code;
    private String message;

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}
当你的json基本格式也是这样时,可以选择一下请求方式,onSuccess中为data中的数据:
 OKHttpUtil.url(BaseUrl.startFrome)
                .post("id", id)
                .post("processDefinitionId", processDefinitionId)
                .execute(new GsonBack<InputFormBean>() {

                    @Override
                    public void onSuccess(Call call, InputFormBean obj) {
                        getV().initInput(obj);
                    }
                });
智能的地方在于GsonBack解析时,只需要传入data的类型泛型即可,onSuccess自动解析data为List、String、obj的各种情况。例如当你的json为:
{
    "code":200,
    "message":"这是一条消息",
    "data":"data是一个字符串"
}
这时你请求可以这样写:

 OKHttpUtil.url(BaseUrl.startFrome)
                .post("id", id)
                .post("processDefinitionId", processDefinitionId)
                .execute(new GsonBack<String>() {

                    @Override
                    public void onSuccess(Call call, String obj) {
//                        getV().initInput(obj);
                    }
                });
当你的返回json为一个数组的时候:
{
    "code":200,
    "message":"这是一条消息",
    "data":[
        {
            "name":"这是一个数组"
        }
    ]
}
你的请求可以这样写:
 OKHttpUtil.url(BaseUrl.startFrome)
                .post("id", id)
                .post("processDefinitionId", processDefinitionId)
                .execute(new GsonBack<NameBean>() {

                    @Override
                    public void onSuccess(Call call, List<NameBean> obj) {
                        getV().initInput(obj);
                    }
                });
当你的返回json为一个对象时:

{
    "code":200,
    "message":"这是一条消息",
    "data":{
        "name":"这是一个数组"
    }
}
请求可以这样写:
 OKHttpUtil.url(BaseUrl.startFrome)
                .post("id", id)
                .post("processDefinitionId", processDefinitionId)
                .execute(new GsonBack<NameBean>() {

                    @Override
                    public void onSuccess(Call call, NameBean obj) {
                        getV().initInput(obj);
                    }
                });
这样让你只专注于真实需要解析的数据部分。如果你的接口也是这样的标准返回,这里可以默认根据code的错误码做错误提示。当code码等于失败时,或者onSuccess中的设置数据出现异常时,所有的异常信息都汇集到onFaile方法中,默认是Toast提示,如需特殊处理,重写改方法即可。
下面来说一说请求。OKHttpUtil有几个方法,首先设置url,设置完成后,可以选择post、get、json、bytes、file等多中请求方式。如果上传文件,则可以这样简单:
OKHttpUtil.url(BaseUrl.faceRecogUpload)
                .file("image", file).execute(new BaseJsonBack<NetBean>() {

            @Override
            public void onSuccess(Call call, NetBean obj) {
                ToastUtil.showShort(mContext, obj.getMessage());
                getV().finish();
            }
        });
同时如果需要在上传文件时添加参数,则只需在file方法调用post方法即可。其他类型请求类似,详情参考truck,由于OKHttp是一个特别轻量级的封装,如有任何可直接查看okhttputil源码,简单易懂。
如果需要下载文件,请求方式正常设置,只需在execute的时候,替换GsonBack即可,例如:
new OKHttp(getV()).url("http://122.143.192.38:8010/userFile/131492350696019991.mp4")
                .get()
                .execute(new FileBack() {

                    @Override
                    public void onDownloadSuccess(final String fileDir) {
                        ToastUtil.showShort(mContext, "保存路径--" + fileDir);
                    }

                    @Override
                    public void onDownloading(int progress) {
                        ToastUtil.showShort(mContext, "下载百分比--" + progress);
                    }

                    @Override
                    public void onDownloadFailed(Exception e) {
                        ToastUtil.showShort(mContext, "失败");
                    }
                });
以上为OKHttpUtil的基本用法,如有疑问,可以给我留言,如有需要,我后续会专为这个OKHttpUtil写一个专题,这里面确实有很多处理OKHttp请求的联网细节。
下面简单介绍一下RetrofitUtil。RetrofitUtil主要的特点是增加默认json打印,增加RetrofitBack对json回调的统一处理。具体使用方式如下:
 RetrofitUtil.create(RequestUrl.class, getV())
                .upload(description, body)
                .compose(getV().bindToLifecycle())
                .compose(RxUtil.io_main())
                .subscribe(new RetrofitBack<LoginBean>() {
                    @Override
                    public void onSuccess(LoginBean loginBean) {

                    }

                    @Override
                    public void onFailure(Throwable e) {

                    }
                });

快速实现

以上为使用OKHttp实现Http请求的两种方式,Retrofit介绍的内容不是很多,因为Retrofit本身就是对OkHttp一个封装的过程,我没有过多的修改的它的设计理念,这里加了几点我再使用中感觉特别不方便的地方。了解了以上的联网方式,是不是就觉得这样的方式已经很快了,这里我再推荐一个小插件,可以快速提高调试接口速度--GsonFormat。它的安装方式和 Android开发truck快速开发框架TitleBar(六)相同。当你按照完成后,找打你根据json写实体bean的类,只需要按住快捷键shift+alt+s,在弹出的界面中粘贴上json代码,然后点击确定,即可自动json生成实体bean了。这样让你更加专注于逻辑判断处理。
最后附上truck快速开发交流qq群:698442320
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值