###1、简介
1、OKHttp是Square公司推出的一款高效的HTTP客户端,支持同一个地址的连接共享同一个Socket、GZIP压缩、请求缓存等等
2、OkHttp内部依赖Okio,Okio已经被谷歌使用在了android源码上,相当强大
3、android-async-http内部使用HttpClient,但是android6.0版本中已经删除了HttpClient的API,所以android-async-http已经过时。
###2、OKHttp主要功能
1、请求文本数据
2、大文件上传
3、大文件下载
4、请求图片
###3、使用方法
####3.1 导入OkHttp:
compile ‘com.squareup.okhttp3:okhttp:3.6.0’
####3.2 get请求:
// 作为全局实例保存,在app的各处,使用这一个对象就可以了
// 这样所有的请求可以共用response缓存和线程池
//1、创建OkHttpClient客户端对象
final OkHttpClient okHttpClient = new OkHttpClient();
//2、创建Request对象,封装请求参数
Request request = new Request.Builder().url(urlPath).build();
//3、将请求封装成了任务
Call call = okHttpClient.newCall(request);
//4、将任务加入调度队列
call.enqueue(new Callback()
{
@Override
public void onFailure(Call call, IOException e)
{
}
//onResponse方法不在UI线程,所以需要handler来更新UI
@Override
public void onResponse(Call call, Response response) throws IOException
{
if (response.isSuccessful())
{
//使用handler发送消息来更新UI
String result = response.body().string();
Message msg = handler.obtainMessage();
msg.obj = result;
handler.sendMessage(msg);
}
}
});
/*
Call(任务)有两个方法:
execute():
立即执行请求,阻塞直到响应可以被处理。
enqueue():
以异步的方式去执行请求,将call加入调度队列,等待任务执行完成,任务完成后可在 Callbacl中的onResponse方法中得到结果。
*/
####3.3 post请求:
//1、创建OkHttpClient客户端对象
OkHttpClient okHttpClient = new OkHttpClient();
//2、创建请求体对象,数据类型为json
MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
RequestBody requestBody = RequestBody.create(mediaType, "");
//3、创建Request对象,封装请求参数
Request request = new Request.Builder().post(requestBody).url(urlPath).build();
//4、将任务加入调度队列
okHttpClient.newCall(request).enqueue(new Callback()
{
@Override
public void onFailure(Call call, IOException e)
{
}
@Override
public void onResponse(Call call, Response response) throws IOException
{
if (response.isSuccessful())
{
String result = response.body().string();
Message msg = handler.obtainMessage();
msg.obj = result;
handler.sendMessage(msg);
}
}
});
###3、OkHttp封装