OkHttp的学习与总结
【1】 优势:
[1] 代码风格
[2] 支持同步、异步加载
[3] 链接复用(提高性能)
[4] 支持数据缓存
[5] 支持http2.0版本
【2】 学习内容
[0] GET与POST之前的区别:
GET放在URL的末尾,安全性低,常用于获取数据 ;
POST放在请求体的正文,更安全,更适合操作数据(添加,更改,删除,上传文件)
[1] 同步GET方法实现
[2] 同步GET方法实现
[3] POST方法实现
(1) 普通数据参数提交
(2) 混合式的数据提交(普通数据+文件)
[4] Request 包含的内容 Response 包含的内容
(1) 请求方法、URL、协议版本 (1) 响应状态码
(2) 请求头 (Key = value) (2) 响应头 (Key = value)
(3) 请求正文 (3) 响应正文
【3】 核心类
[1] OkHttpClient : 客户端连接类(在整个App,创建一个对象即可)
配置参数,如连接超时、数据缓存等
[2] Response : 针对 Http 协议响应部分的描述
[3] Request : 针对 Http 协议请求部分的描述
[4] Call : 描述发送一个请求
【4】实现同步GET方法,代码流程(需要创建子线程)
[1] 创建 OkHttpClient 对象 OkHttpClient client = new OkHttpClient();
[2] 创建 Request 对象 Request request = new Request.Builder().url.build() (指明 url)
[3] 发送一个请求,来获取 Response 对象
Response response = client.newCall().execute()
[4] 判断Response是否成功
【5】实现同步POST方法提交,代码流程(需要创建子线程)
[1] 创建客户端连接对象 OkHttpClient client = new OkHttpClient();
[2] 创建 Request 对象
Request request = new Request.Builder().url.post(requestBody).build() (指明url 和 post)
[3] RequestBody的获取:
RequestBody requestBody = new FormBody.Builder().
.add("bookname", "JAVA开发2")
.add("author", "某某某")
.add("price", "180")
.add("bookDesc", "java入门").build();
[4] 发送一个请求,来获取 Response 对象
Response response = client.newCall().execute()
[5]判断Response是否成功
【6】实现异步GET方法,代码流程(不需要创建子线程) 略
【7】实现异步POST方法,代码流程(不需要需要创建子线程) 略
【8】同步方法与异步方法的差异:
[1] 同步方法的 OkHttpClient 对象调用的方法不同:(1)同步:execute() (2)异步:enqueue()
[2] 是否需要创建子线程:(1)需要(2)异步:不需要
【9】实现 OkHttp,实现(文件、普通参数)提交
MutipartForm 表单提交
关键代码:
//提交表单参数,封装请求体(重点)
RequestBody requestBody = new FormBody.Builder().
addformPart("bookname", "JAVA开发2").
addformPart("author", "某某某").
addformPart("price", "180").
addformPart("bookDesc", "java入门").
addFormDataPart("image","ios.png",RequestBody.create(mediaType,new File(Environment.getExternalStorageDirectory(),"abc.png"))). //重点
build();