博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Okhttp实用封装
阅读量:6836 次
发布时间:2019-06-26

本文共 3603 字,大约阅读时间需要 12 分钟。

概述

对okhttp的get,put,delete,post请求简单封装,减少了不必要的冗余代码

详细

代码下载:

在自己项目的开发过程中需要用到网络请求,且用的okhttp网络框架,虽然用起来很方便,但是倒出充斥着重复代码,所以在研究了okhttp源码的基础上对Okhttp的使用进行了封装,结构清晰,可以满足基本的上传、下载、put,delete,get,post请求。如果想了解okhttp的工作原理,也可以参考本文后面留的博客地址

 

一、准备工作

在gradle文件中配置:

compile "com.squareup.okhttp3:okhttp:3.8.0"

二、程序实现

1、封装库的代码结构如下:

M2`PY)X4L%{J[(_}5]WATKP.png

interf包:提供了IHttpConnect接口作为一个http链接,IResponse接口作为网络返回的响应接口;IRequestCallback接口作为每一个request请求的回调。

public interface IHttpConnect {    /**     * 异步请求     */    void asyncConnect(@NonNull HttpRequest request);    /**     * 同步链接请求,不能在主线程中调用,只能在异步线程中,并且注意同步引起的性能问题     */    @WorkerThread    IResponse syncConnect(@NonNull HttpRequest request);    void abort(HttpRequest request);    void abortAll();}

impl包:提供了一些IRequestCallback的简单实现,比如DownLoadCallback实现了文件下载功能。

okhttp包:其中OkhttoConnect是IHttpConnect接口的实现类,OkhttpHelper具体实现了Okhttp发起网络请求的功能。

request包:提供了OkhttpRequest类,作为请求参数的包装类。UploadFileReqeust作为文件上传用

response包:提供了OkResponse对象,作为Okhttp请求返回的封装

ConnectHelper:对我提供的IHttpConnect的适配类,其具体工作交给IHttpConnect的具体实现类,为简单的适配器模式

2、实现思路

从设计思路上来看,一个Request就是一个IHttpConnect发起的一个同步或者异步请求的过程,对于同步请求来说就是一个IHttpConnect实现类发起的syncConnect(Httprequest)过程,异步请求就是IHttpConnect发起的asyncConne(HttpRequest)过程。

3、简单的get请求:

ConnectHelper connectHelper = new ConnectHelper();    HttpRequest.Builder builder = new HttpRequest.Builder();        builder.setUrl("http://www.baidu.com")                .addHeader("xxx", "yyyy")                .addParams("xxx", "yyyy")                .setParams(map)                .setHeaders(map)                .setCallback(new RequestCallbackImpl() {                    @Override                    public void requestFinish(HttpRequest request, IResponse response) {                                           }                });        HttpRequest request = builder.build();        connectHelper.asyncConnect(request);

4、简单的post请求:

HttpRequest.Builder builder = new HttpRequest.Builder();        builder.setUrl("http://www.baidu.com")                .setRequestType(RequestType.DELETE)                .addHeader("xxx", "yyyy")                .addParams("xxx", "yyyy")                .setCallback(new RequestCallbackImpl() {                    @Override                    public void requestFinish(HttpRequest request, IResponse response) {                    }                });        HttpRequest request = builder.build();        connectHelper.asyncConnect(request);

5、简单的put请求:

HttpRequest.Builder builder = new HttpRequest.Builder();        builder.setUrl("http://www.baidu.com")                .setRequestType(RequestType.PUT)                .addHeader("xxx", "yyyy")                .addParams("xxx", "yyyy")                .setCallback(new RequestCallbackImpl() {                    @Override                    public void requestFinish(HttpRequest request, IResponse response) {                    }                });        HttpRequest request = builder.build();        connectHelper.asyncConnect(request);

如果想使用文件下载功能,把callback传DownLoadCallback即可

三、运行效果

比如get请求获取字符串的requestCallBack如下:

setUrl("http://www.baidu.com")        .addHeader("xxx", "yyyy")        .addParams("xxx", "yyyy")        .setCallback(new RequestCallbackImpl() {            @Override            public void requestFinish(HttpRequest request, IResponse response) {                System.out.print("respose ==" + response.getString());            }        });

运行打印效果如下:

QQ截图20170829110044.png

四、其他补充

1、除了addHeaders和addParams之外,如果需要批量添加一些header或者param也可以调用Builder的setHeaders(map)或者setParams(map)方法,将headers或者params放入map里面一次构建完成

2、如果需了解okhttp的工作原理的话,可以参考

 

 

 

代码下载:

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

 

转载于:https://www.cnblogs.com/demodashi/p/8491091.html

你可能感兴趣的文章
linux 条件
查看>>
配置JAVA环境
查看>>
hdu5666 BestCoder Round #80
查看>>
linux下备份mysql命令
查看>>
mybatis由浅入深day02_4多对多查询_多对多查询总结
查看>>
关于Android连载(3)Android程序开发指南【转载】
查看>>
leetcode532
查看>>
架构设计(二)
查看>>
表单验证提交内容不能为空的几种方法
查看>>
QT项目性能调优小记
查看>>
通过button将form表单的数据提交到action层
查看>>
九度 1357 疯狂地Jobdu序列
查看>>
接口和抽象类对比
查看>>
memcached 常用命令及使用说明
查看>>
双链表
查看>>
.NET基础——数组
查看>>
解决 android 高低版本 webView 里内容 自适应屏幕的终极方法
查看>>
调用微信截图功能c# 截图带扩展名
查看>>
AC日记——830A - Office Keys
查看>>
实用js
查看>>