OkHttp| 青训营笔记
写在前面
这是我参与「第四届青训营 」笔记创作活动的第1天
该笔记为之前断断续续的笔记片段和大项目之后的笔记的整合,复习一些基本知识和在项目中遇到的问题。如有不妥之处,还望予以指正。
知识梳理
OkHttp 介绍
背景
网络框架有:HttpURLConnection、Volley、OkHttp、Retrofit 。
Android 提供了两种 Http 接口:标准Java接口 HttpURLConnection 和 Apache接口 HttpClient 。
但是 HttpClient 已经不建议被使用了,HttpURLConnection 作为轻量级的 Http 客户端,想要使用也是可以的。Volley 是基于 HttpClient 的,所以也不建议使用。
不过目前有更加高效、快速的 OkHttp 和 基于 OkHttp 的 Retrofit,HttpURLConnection 就不是一个更好的选择,大项目也建议 OkHttp。
优缺点
优点
- 支持SPDY, 可以合并多个到同一个主机的请,使用连接池技术减少请求的延迟。
- 使用GZIP压缩减少 传输 的数据量, 缓存响应避免重复的网络请求、拦截器等等。
缺点
- 消息回来需要切到主线程,主线程要自己去写。
- 传入调用比较复杂。
OkHttp 的使用
我只在 Spring MVC 里做过相应的处理 GET 和 POST 请求,感觉上大致上是类似的,毕竟都是网络通信。以下就是 GET 和 POST 的相关代码。
GET
GET 请求是常规的:客户端对象、请求、发送请求。
// OkHttp GET
// 新建 Client 对象
OkHttpClient okHttpClient = new OkHttpClient();
// 新建 Request 请求
Request request = new Request.Builder().get().url("url").build();
// 将 Request 封装为 Call
Call call = okHttpClient.newCall(request);
// 返回 response
try {
Response response = call.execute();
} catch (IOException e) {
e.printStackTrace();
}
POST
POST 也和 GET 类似。不过与 GET 相比,多了一个请求体,毕竟 POST 相比于 GET 安全性更高,需要加密,也不难理解。POST 也支持 JOSN 等数据的传递,具体使用起来并不会特别困难。
// OkHttp POST
// 新建 RequestBody
RequestBody requestBody = new FormBody.Builder().add("tag","body").build();
request = new Request.Builder().post(requestBody).url("url").build();
总结
以后在新项目中,推荐使用 OkHttp 或者 Retrofit。虽然我并不负责这一块的代码,但是目前来看,使用二者可以节省开发时间,提高开发效率。做后端 Spring MVC 时,就能感觉到一直在处理相同的模板代码,而且还是必须要写的,这点在 OkHttp 上似乎更好点。