1.okhttp官网地址:http://square.github.io/okhttp/
2. github中okhttp的链接路径[https://github.com/square/okhttp]
okhttp的特点:
* 支持HTTP/2 和 SPDY
* 默认支持 GZIP 降低传输内容的大小
* 支持网络请求的缓存
* 当网络出现问题时,自动重试一个主机的多个 IP 地址
3.okHttp中Api的简单介绍:
a.OkHttpClient:新建一个OkHttpClient实例,用于处理请求。
b.Request:构建请求参数,如url,请求方式,请求参数,header等。
c.Call:生成一个具体请求实例,相当于将请求封装成了任务;两种方式:
①、call.execute(),非异步方式,会阻塞线程,等待返回结果。
②、call.enqueue(Callback),异步方式。
get请求:
第一步:在app/build.gradle下的dependencies中添加依赖:
compile ‘com.squareup.okhttp3:okhttp:3.5.0’
第二步:创建okHttpClient对象
OkHttpClient client = new OkHttpClient();//我们可以将这个对象看成是一个队列
Request get_request = new Request.Builder()//创建request对象的get请求
.get()
.url(url)
.build();
第四步:将创建好的request添加到OkHttpClient中
client.newCall(get_request).enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {//失败返回的结果
//将错误的结果打印出来
Log.i(TAG, "onFailure() e=" + e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {//成功返回的结果
String result = response.body().string();
Log.i(TAG, " onResponse() reuslt=" +result);
}
});
post请求:
第一步:创建okHttpClient对象
OkHttpClient client = new OkHttpClient();//我们可以将这个对象看成是一个队列
第二步:创建创建request对象的get请求
Request post_request = new Request.Builder()//创建request对象的get请求
.post(requestBody)
.url(url)
.build();
第三步:将创建好的request添加到OkHttpClient中
RequestBody requestBody = new FormBody.Builder()
.add("key", "value")
.build();
client.newCall(get_request).enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {//网络请求失败返回的结果
//如果请求网络错误,将错误的结果打印出来
Log.i(TAG, "onFailure() e=" + e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {//成功返回的结果
String result = response.body().string();
Log.i(TAG, " onResponse() reuslt=" +result);
}
});
注意点:
1.okHttp在请求到网络数据后在call中的onFailure()及onResponse()都运行在非主线程,我们不能再这两个方法
里面直接更新UI
2.这里需要注意的一点:onResponse回调的参数是response,一般情况下,比如我们希望获得返回的字符串,可以通response.body().string()获取;如果希望获得返回的二进制字节数组,则调用response.body().bytes();如果你想拿到返回的inputStream,则调用response.body().byteStream()
附加点:因为原生OkHttp的使用比较复杂,有一个包装过的工具项目okhttp-utils使用非常简单
* 添加依赖: compile 'com.zhy:okhttputils:2.3.8'
* 工具类简介:[https://github.com/hongyangAndroid/okhttp-utils](https://github.com/hongyangAndroid/okhttp-utils)