1.1_简介
OKHttp是一款高效的HTTP客户端,支持连接同一地址的链接共享同一个socket,通过连接池来减小响应延迟,还有透明的GZIP压缩,请求缓存等优势,其核心主要有路由、连接协议、拦截器、代理、安全性认证、连接池以及网络适配,拦截器主要是指添加,移除或者转换请求或者回应的头部信息
这个库也是square开源的一个网络请求库(okhttp内部依赖okio)。现在已被Google使用在Android源码上了,可见其强大。
关于网络请求库,现在应该还有很多人在使用android-async-http。他内部使用的是HttpClient,但是Google在6.0版本里面删除了HttpClient相关API,可见这个库现在有点过时了。
1.2_下载地址
1.3_OKHttp主要功能
1、联网请求文本数据
2、大文件下载
3、大文件上传
4、请求图片
2_原生OKHttp的Get和Post请求小案例
UI线程接受显示请求数据private OkHttpClient client = new OkHttpClient();
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case GET:
//获取数据
tv_result.setText((String) msg.obj);
break;
case POST:
//获取数据
tv_result.setText((String) msg.obj);
break;
}
}
};
get与post 异步请求数据
/**
* 使用get请求网络数据
*/
private void getDataFromGet() {
new Thread() {
@Override
public void run() {
super.run();
try {
String result = get("http://api.m.mtime.cn/PageSubArea/TrailerList.api");
Log.e("TAG", result);
Message msg = Message.obtain();
msg.what = GET;
msg.obj = result;
handler.sendMessage(msg);
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
/**
* 使用post请求网络数据
*/
private void getDataFromPost() {
new Thread() {
@Override
public void run() {
super.run();
try {
String result = post("http://api.m.mtime.cn/PageSubArea/TrailerList.api", "");
Log.e("TAG", result);
Message msg = Message.obtain();
msg.what = POST;
msg.obj = result;
handler.sendMessage(msg);
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
/**
* get请求
*
* @param url 网络连接
* @return
* @throws IOException
*/
private String get(String url) throws IOException {
Request request = new Request.Builder()
.url(url)
.build();
Response response = client.newCall(request).execute();
return response.body().string();
}
/**
* okhttp3的post请求
*
* @param url
* @param json
* @return
* @throws IOException
*/
private String post(String url, String json) throws IOException {
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
Response response = client.newCall(request).execute();
return response.body().string();
}