okhttp是一个第三方类库,用于android中请求网络。这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和LeakCanary)
OKHttp是Android版Http客户端。非常高效,支持SPDY、连接池、GZI和HTTP缓存,支持SPDY,可以合并多个到同一个主机的请求。
OkHttp 处理了很多网络疑难杂症:会从很多常用的连接问题中自动恢复。如果您的服务器配置了多个IP地址,当第一个IP连接失败的时候,OkHttp会自动尝试下一个IP。
OkHttp还处理了代理服务器问题和SSL握手失败问题。
当我们使用一个三方库时,最好就是减少对其API的依赖,所以我们要对原始的OKHttp做二次封装来实现我们的业务需求,如何封装就要对其原理及一些常用的API非常熟悉,下面我们会系统学习网络这一模块,然后封装成符合我们业务的SDK。
说起网络就要先了解什么是HTTP?
功能:本地持久化数据、定制化的解析器、定制化的构建器、可自由切换网络库
设计Task与线程池是为了更好的维护网络请求的开始、暂停、取消等操作。
比如下面两个场景:
本项目只采取单一的Task处理策略,当存在相同的任务时,新建立的任务会取消掉。
如何使用:TaskHelper
OkHttpClient : 建议OkHttp的客户端,初始化OkHttp要使用的配置信息。
Request:请求信息封装
Call:可执行异步或者同步请求
Interceptor: OkHttp中的精华就是 拦截器,责任链设计模式。
RetryAndFollowUpInterceptor:负责错误重试及重定向。
BridgeInterceptor:负责组装请求及解析数据。
CacheInterceptor:负责读取缓存和更新缓存。
ConnectInterceptor:负责和服务器建立连接。
CallServerInterceptor:负责发送请求及接收数据。Okio 对接
OkHttpClient client = new OkHttpClient(); // okhttp 配置一些默认
//2、构建请求 1)url 2)参数
HttpUrl.Builder builder = HttpUrl.parse("https://www.baidu.com").newBuilder();
// builder.addQueryParameter("sort", "desc");
// builder.addQueryParameter("page", "1");
// builder.addQueryParameter("pagesize", "1");
// builder.addQueryParameter("time", "" + System.currentTimeMillis()/1000);
// builder.addQueryParameter("key", "bbc57dd5e4f05991aff09eafd2e667e0");
//3、构建Request
Request request = new Request.Builder()
.url(builder.build())
.get()
.build(); //建造者设计模式
//4、构建Call
Call call = client.newCall(request);
//5 执行网络请求
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.e("initGetNetData","onFailure" + e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.e("initGetNetData","onResponse" + response.body().string());
}
});