OkHttp
Okhttp介绍
OkHttp是一款十分好用的Android网络框架,尽管官方提供了UrlConnection,但是OkHttp依然是最为广泛使用的网络请求方式。如果有一定程度的英语阅读能力,建议直接去官网阅读官方文档。前往Okhttp官网
作为一款优秀的网络框架,Okhttp有以下特性:
- 支持HTTP/2,允许所有同一个主机地址的请求共享同一个socket连接
- 连接池减少请求延时
- 透明的GZIP压缩减少响应数据的大小
- 缓存响应内容,避免一些完全重复的请求
OkHttp支持任何Android 2.3以上平台,并且需要JDK 1.7以上。
OkHttp的使用
由于OkHttp是第三方框架,所以在使用前需要在gradle下添加依赖
implementation "com.squareup.okhttp3:okhttp:4.9.0"
OkHttp Get Url
Get是在开发中最常用的网络请求之一。
//新建一个OkHttpClient对象
OkHttpClient client = new OkHttpClient();
String run(String url) throws IOException {
//创建一个request对象
Request request = new Request.Builder()
.url(url)
.get()
.build();
//获取响应并把响应体返回
try (Response response = client.newCall(request).execute()) {
return response.body().string();
}
}
通过以上代码,就成功的发送了一个Get请求,并获取了响应。在这里返回了string类型,但是也可以返回二进制数组和inputstream(可以获取inputstream说明OkHttp支持大文件的传输)
OKHttp POST
POST也是常用的网络请求之一,用法与GET十分相似,只是多了RequestBody对象来携带需要传输的数据罢了。
public static final MediaType JSON
= MediaType.get("application/json; charset=utf-8");
OkHttpClient client = new OkHttpClient();
String post(String url, String json) throws IOException {
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
try (Response response = client.newCall(request).execute()) {
return response.body().string();
}
}
至此,简单的OkHttp的简单应用已经介绍完了,OKHttp的使用就是如此简单。
Okhttp文件上传
File file = new File(Environment.getExternalStorageDirectory(), "FILE_NAME");
RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);
RequestBody requestBody = new MultipartBuilder()
.type(MultipartBuilder.FORM)
.addPart(Headers.of(
"Content-Disposition",
"form-data; name=\"username\""),
RequestBody.create(null, "hyb"))
.addPart(Headers.of(
"Content-Disposition",
"form-data; name=\"mFile\", filename=\"hyb.mp4\""), fileBody)
.build();
Request request = new Request.Builder()
.url("http://192.168.1.103:8080/okHttpServer/fileUpload")
.post(requestBody)
.build();
Call call = mOkHttpClient.newCall(request);
call.enqueue(new Callback()
{
//...
});
参考了鸿洋大神的博客。