OkHttp
简介:
OkHttp是一个高效的HTTP客户端
使用builders构造器模式,支持阻塞式的同步请求和带回调的异步请求。
特性:
1. 允许所有同一个主机地址的请求共享同一个socket连接
2. 连接池减少请求延时
3. 透明的GZIP压缩减少响应数据的大小
4. 缓存响应内容,避免一些完全重复的请求
引入项目:
implementation("com.squareup.okhttp3:okhttp:3.14.0")
官网地址:
https://github.com/square/okhttp
基本权限:
1. 联网权限
<uses-permission android:name="android.permission.INTERNET"/>
2. 写入缓存权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
发送请求:
步骤:
1. 构建OkHttpClient客户端
2. 构建Request请求对象
3. 构建Call访问对象
4. 发送请求获取返回数据
1. 同步Get请求
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.builder()
.url("https://www.baidu.com") // 请求地址
.get() // 请求方式,默认为get请求,可以不写
.build();
Call call = okHttpClient.newCall(request);
new Thread(new Runnable () {
@Override
public void run () {
try {
Response response = call.execute();
Log.d(TAG, "run: " + response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
注意:
同步网络请求会阻塞线程,需要放置在子线程中执行
2. 异步Get请求
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.builder()
.url("https://www.baidu.com") // 请求地址
.get() // 请求方式,默认为get请求,可以不写
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback(){
@Override
public void onFailure(Call call, IOException e) {
Log.d(TAG, "onFailure: ");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.d(TAG, "onResponse: " + response.body().string());
}
});
3. Post请求--提交String
MediaType mediaType = MediaType.parse("text/x-markdown; charset=utf-8");
String requestBody = "CSDN";
Request request = new Request.Builder()
.url("https://api.github.com/markdown/raw")
.post(RequestBody.create(mediaType, requestBody))
.build();
OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.newCall(request).enqueue(new Callback () {
@Override
public void onFailure(Call call, IOException e) {
Log.d(TAG, "onFailure: " + e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.d(TAG, response.protocol() + " : " +response.code() +