Android使用使用OkHttp进行网络同步异步操作进行网络同步异步操作
OkHttp是一个Java和Android的HTTP和HTTP/2的客户端,负责发送HTTP请求以及接受HTTP响应。
一、使用一、使用OkHttp
OkHttp发送请求后,可以通过同步或异步地方式获取响应。下面就同步和异步两种方式进行介绍。
1.1、同步方式、同步方式
发送请求后,就会进入阻塞状态,知道收到响应。下面看一个下载百度首页的例子:
OkHttpClient client = new OkHttpClient.Builder().readTimeout(5, TimeUnit.SECONDS).build();
Request request = new Request.Builder().url("http://www.baidu.com")
.get().build();
Call call = client.newCall(request);
try {
Response response = call.execute();
System.out.println(response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
上面的代码先创建OkHttpClient和Request对象,两者均使用了Builder模式;然后将Request封装成Call对象,然后调用Call的
execute()同步发送请求,最后打印响应。
1.2、异步方式、异步方式
异步方式是在回调中处理响应的,同样看下载百度首页的例子:
OkHttpClient client = new OkHttpClient.Builder().readTimeout(5, TimeUnit.SECONDS).build();
Request request = new Request.Builder().url("http://www.baidu.com")
.get().build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
System.out.println("Fail");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
System.out.println(response.body().string());
}
});
同样是创建OkHttpClient、Request和Call,只是调用了enqueue方法并在回调中处理响应。
上面介绍了同步、异步获取请求的步骤,都是比较简单的。
1.3、、Request、、Response、、Call
上面的代码中涉及到几个常用的类:Request、Response和Call。下面分别介绍:
Request
每一个HTTP请求包含一个URL、一个方法(GET或POST或其他)、一些HTTP头。请求还可能包含一个特定内容类型的数
据类的主体部分。
Response
响应是对请求的回复,包含状态码、HTTP头和主体部分。
重写请求重写请求
当将Request提交给OkHttp后,出于正确性和效率的考虑,OkHttp在传输请求之前会重写请求。
OkHttp可能会在请求中添加缺少的请求头,包括”Content-Length”,”Transfer-Encoding”,”User-
Agent”,”HOST”,”Connection”和”Content-Type”等。
有些请求可能有缓存的响应。当缓存响应过时时,OkHttp可以做一个额外的GET请求获取最新的响应。这要求”If-Modified-
Since”和”If-None-Match”头被添加。
评论0