Android OkHttp使用教程
我自己写的okhttp辅助类 Jerry
okhttp地址 OkHttp
本文的教程基于okhttp 3.2.0
一 获取okhttp client
OkHttpClient okHttpClient = new OkHttpClient();
怎么样,是不是很简单?当然,你也可以个性化你的Client:
OkHttpClient okHttpClient = new OkHttpClient.Builder().readTimeout(1000, TimeUnit.MILLISECONDS).build();
OkHttpClient.Builder提供了诸如连接超时、缓存等等诸多配置。
二发送一个Get请求
发送请求我们要通过创建一个Request对象:
Request request = new Request.Builder().build();
Request对象为我们提供了几种常见的请求方式:post、get、delete、put。
下面我们将创建一个简单的get请求:
Request request = new Request.Builder().url("your url").get().build();
当然我们现在只是创建了一个Request,发出这个Request是由OkHttpClient完成的:
try {
Response response = okHttpClient.newCall(request).execute();
} catch (IOException e) {
e.printStackTrace();
}
或者:
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(okhttp3.Call call, IOException e) {
}
@Override
public void onResponse(okhttp3.Call call, Response response) throws IOException {
}
});
-
如果有一定开发经验的读者读到这里应该已经明白了这两种方法的区别了:
-
execute方法为我们提供的同步请求,也就是说当我们在UI线程调用此方法会阻塞我们的UI线程。
-
enqueue是异步的,请求完成或者抛出异常,OkHttpClient会回调名为CallBack的对象,enqueue方法并不会阻塞我们的UI线程。
如果服务器有响应,无论是execute还是enqueue都会为我们提供一个Response对象,Request对象包含了诸多方法,如:
response.isSuccessful(); //预示着请求是否成功,也就是http status code为200的情况;
response.code(); //获取http status code,也就是200,404这类的状态码;
response.headers(); //获取响应头,返回的是Headers对象。当然也可以通过
response.header("name")或者response.header("name","default vaule")直接获取相应的响应头
当然还有很多其他方法,需要读者自行研究。