本系列文章是对OkHttp的使用、框架封装及源码分析所写。
一、主要内容
1、简介OkHttp
2、介绍OkHttp的基本使用
二、简介
HTTP is the way modern applications network. It’s how we exchange data & media. Doing HTTP efficiently makes your stuff load faster and saves bandwidth.
OkHttp is an HTTP client that’s efficient by default:
1、HTTP/2 support allows all requests to the same host to share a socket.
2、Connection pooling reduces request latency (if HTTP/2 isn’t available).
3、Transparent GZIP shrinks download sizes.
4、Response caching avoids the network completely for repeat requests.
以上是Okhttp官网对Okhttp的介绍:
1、HTTP / 2支持允许同一主机的所有请求共享一个套接字。
2、连接池减少了请求延迟(如果HTTP / 2不可用)。在后面文章中会讲到连接池的概念。
3、支持gzip压缩。
4、对响应进行缓存,减少了请求次数。
三、使用
同步GET:
//1
OkHttpClient client = new OkHttpClient();
//2
Request request = new Request.Builder()
.url("http://www.baidu.com")
.build();
try {
//3
Response response = client.newCall(request).execute();
//4
System.out.println("respone:" + response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
1、创建OkHttpClient。
2、创建Request。可以看出这个request,是通过构建者模式获得的。通过request我们可以配置请求的相关信息。例如:配置请求头或者缓存信息等。
3、通过newCall()向服务器发起请求。
4、接收服务器返回的信息。
注意:
网络请求是耗时操作,此请求是同步请求,会阻塞当前线程。
同步POST:
//1
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
RequestBody body = RequestBody.create(mediaType, "{\"name\":\"wen_wen\")}");
//2
Request request = new Request.Builder()
.url("http://www.baidu.com")
.post(body)//请求体
.build();
//3
try {
Response response = client.newCall(request).execute();
//4
System.out.println("respone:" + response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
1、创建OkHttpClient。
2、创建Request。可以看出这个request,是通过构建者模式获得的。通过request我们可以配置请求的相关信息。例如:配置请求头或者缓存信息等。
3、通过newCall()向服务器发起请求。
4、接收服务器返回的信息。
区别:
POST的请求方式,需要定制请求的格式,例如:
MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
RequestBody body = RequestBody.create(mediaType, "{\"name\":\"wen_wen\")}");
注意:
网络请求是耗时操作,此请求是同步请求,会阻塞当前线程。
异步GET
//1
OkHttpClient httpClient = new OkHttpClient();
//2
Request request = new Request.Builder().url("http://www.baidu.com")
.build();
//3
httpClient.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()) {
//3
System.out.println(response.body().string());
}
}
});
1、创建OkHttpClient。
2、创建Request。可以看出这个request,是通过构建者模式获得的。通过request我们可以配置请求的相关信息。例如:配置请求头或者缓存信息等。
3、通过newCall()向服务器发起请求。
4、接收服务器返回的信息。
注意:
因为是异步请求,所以返回的结果是运行在工作线程中,需要将请求的结果返回到主线程中。
异步POST
//1
OkHttpClient httpClient = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
RequestBody body = RequestBody.create(mediaType, "{\"name\":\"wen_wen\")}");
//2
Request request = new Request.Builder().url("http://www.baidu.com")
.post(body)
.build();
//3
httpClient.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()) {
System.out.println(response.body().string());
}
}
});
1、创建OkHttpClient。
2、创建Request。可以看出这个request,是通过构建者模式获得的。通过request我们可以配置请求的相关信息。例如:配置请求头或者缓存信息等。
3、通过newCall()向服务器发起请求。
4、接收服务器返回的信息。
区别:
POST的请求方式,需要定制请求的格式,例如:
MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
RequestBody body = RequestBody.create(mediaType, "{\"name\":\"wen_wen\")}");
注意:
因为是异步请求,所以返回的结果是运行在工作线程中,需要将请求的结果返回到主线程中。