【OkHttp】OkHttp 源码分析 ( 网络框架封装 | OkHttp 4 迁移 | OkHttp 建造者模式 )
OkHttp 系列文章目錄
【OkHttp】OkHttp 簡介 ( OkHttp 框架特性 | Http 版本簡介 )
【OkHttp】Android 項目導入 OkHttp ( 配置依賴 | 配置 networkSecurityConfig | 配置 ViewBinding | 代碼示例 )
【OkHttp】OkHttp Get 和 Post 請求 ( 同步 Get 請求 | 異步 Get 請求 | 同步 Post 請求 | 異步 Post 請求 )
【OkHttp】OkHttp 上傳圖片 ( 獲取 SD 卡動態權限 | 跳轉到相冊界面選擇圖片 | 使用 OkHttp 上傳圖片文件 )
【OkHttp】OkHttp 源碼分析 ( 網絡框架封裝 | OkHttp 4 遷移 | OkHttp 建造者模式 )
文章目錄
- OkHttp 系列文章目錄
- 一、網絡框架封裝
- 二、OkHttp 4 遷移
- 三、OkHttp 建造者模式
- 四、博客資源
一、網絡框架封裝
HttpURLConnection 是 Android 中原生的 Http 網絡請求 API , 在 SDK 中提供 , 是 Google 官方提供的 Http 網絡框架 , 使用起來很繁瑣 ;
Http 網絡框架的作用是封裝 Http 請求 ( Request ) 和 響應 ( Response ) ;
Request 請求封裝 : 中封裝 請求頭 , 參數 , 將下面的參數封裝到 Request 請求中 ;
GET / HTTP/1.1 Host: rucfd.ruc.edu.cn Connection: keep-alive Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 If-None-Match: "b7f-5b575595fe630-gzip" If-Modified-Since: Wed, 02 Dec 2020 06:28:18 GMTResponse 響應封裝 : 將 響應頭 以及各種響應參數 封裝到 Request 響應中 ;
HTTP/1.1 200 OK Server: none Date: Mon, 21 Jun 2021 05:15:56 GMT Content-Type: text/html Content-Length: 1104 Connection: keep-alive Last-Modified: Wed, 02 Dec 2020 06:28:18 GMT ETag: "b7f-5b575595fe630-gzip" Accept-Ranges: bytes Vary: Accept-Encoding Content-Encoding: gzipOkHttp 網絡框架就實現了上述封裝 , 并且用法更加
二、OkHttp 4 遷移
OkHttp3 使用 Java 實現 , OkHttp4 使用 Kotlin 實現 ;
如果遷移到 OkHttp4 , 原則上不會出現錯誤 , 二者肯定是兼容的 , 原有代碼不用進行修改 ;
還是有一些需要進行兼容的地方 , 參考如下頁面 ;
https://square.github.io/okhttp/upgrading_to_okhttp_4/
三、OkHttp 建造者模式
使用 OkHttp 創建 Request 請求對象時 , 使用到了 " 建造者模式 " ;
Request request = new Request.Builder().url("https://www.baidu.com") // 設置請求地址.get() // 使用 Get 方法.build();Request 中需要設置很多成員變量需要初始化 , 大部分參數都不是必須的 , 在構造函數中不可能設置十幾個甚至幾十個參數 ;
因此這里使用 " 建造者設計模式 " , 可以根據自己的需求 , 為類設置一個 " 建造者 " Builder , 用戶通過該 Builder 對象根據需求配置不同的參數 ;
在 new Request.Builder() 建造者的構造函數中 , 對 Request 進行了默認初始化操作 ;
Request.Builder 代碼示例 :
public static class Builder {@Nullable HttpUrl url;String method;Headers.Builder headers;@Nullable RequestBody body;/** A mutable map of tags, or an immutable empty map if we don't have any. */Map<Class<?>, Object> tags = Collections.emptyMap();public Builder() {this.method = "GET";this.headers = new Headers.Builder();}Builder(Request request) {this.url = request.url;this.method = request.method;this.body = request.body;this.tags = request.tags.isEmpty()? Collections.emptyMap(): new LinkedHashMap<>(request.tags);this.headers = request.headers.newBuilder();}public Builder url(HttpUrl url) {if (url == null) throw new NullPointerException("url == null");this.url = url;return this;}}四、博客資源
GitHub : https://github.com/han1202012/OkHttp
總結
以上是生活随笔為你收集整理的【OkHttp】OkHttp 源码分析 ( 网络框架封装 | OkHttp 4 迁移 | OkHttp 建造者模式 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【OkHttp】OkHttp 上传图片
- 下一篇: 【错误记录】Android 模拟器安装应