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 GMT

Response 响应封装 : 将 响应头 以及各种响应参数 封装到 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: gzip

OkHttp 网络框架就实现了上述封装 , 并且用法更加

二、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 建造者模式 )相关推荐

  1. Activiti源码分析(框架、核心类。。。)

    Activiti源码分析(框架.核心类...) 目录 概 述 activiti源码分析(一)设计模式 总结: 相关工具如下: 分析: 小结: 参考资料和推荐阅读 LD is tigger foreve ...

  2. SpringMVC源码分析_框架原理图

                                                                                 SpringMVC源码分析_框架原理图     ...

  3. Scrapy-redis 源码分析 及 框架使用

    From:https://blog.csdn.net/weixin_37947156/article/details/75044971 From:https://cuiqingcai.com/6058 ...

  4. ThinkPHP5.1.x 框架源码分析之框架的灵魂

    一.类的自动加载初始 框架的灵魂,类的自动加载 为什么说是框架灵魂呢,一般框架都会有类的自动加载,当引入文件很多的时候,就会需要用到.这一个也是很多人想去阅读源码时卡住的点 源码阅读 打开到入口文件 ...

  5. PhxPaxos源码分析——网络

    了解分布式系统的童鞋肯定听过Paxos算法的大名.Paxos算法以晦涩难懂著称,其工程实现更难.目前,号称在工程上实现了Paxos算法的应该只有Google.阿里和腾讯.然而,只有腾讯的微信团队真正将 ...

  6. [Abp vNext 源码分析] - 1. 框架启动流程分析

    一.简要说明 本篇文章主要剖析与讲解 Abp vNext 在 Web API 项目下的启动流程,让大家了解整个 Abp vNext 框架是如何运作的.总的来说 ,Abp vNext 比起 ABP 框架 ...

  7. android animatorset 监听,Android源码分析--动画框架AnimatorSet

    这一节,我要介绍的是AnimatorSet. 一提到android的动画,一定会涉及到AnimatorSet,因为他太好用了.它所封装的接口让很多复杂的动画叠加变得容易. AnimatorSet是继承 ...

  8. hiredis源码分析与简单封装

    hiredis Hiredis是一个开源C库函数,提供了基本的操作redis 函数, 如数据库连接.发送命令.释放资源等等 1.hiredis net hiredis 本身就是做了跨平台的代码,c语言 ...

  9. jQuery源码分析 整体框架部分及部分常用方法

    最近尝试看看jQuery的源码. 版本 version = "1.11.1" 相对于看一本jQuery如何使用的书,看jQuery源码对它可以有更深层次的理解.jQuery中大量使 ...

最新文章

  1. MEMS为何独领风骚?看完这篇秒懂!
  2. Tomcat 教程之快速入门
  3. 高并发下的接口幂等性解决方案!
  4. kaggle房价预测特征意思_Kaggle实战-波士顿房价预测
  5. go比java快多少_Java 11快多少?
  6. ReactNative环境配置
  7. Web前端面试指导(六):面试后需要总结和交流
  8. 适合初学者的安卓开源项目_开源初学者的6个起点
  9. 基于React的PC网站前端架构分析
  10. Swift 与众不同的地方
  11. 单行/多行文本溢出的省略样式
  12. QQ群发消息怎么发?最全攻略分享
  13. vscode中显示隐藏文件
  14. 利用二进制位求平均值
  15. 如何将ofd格式文档转换成Word
  16. 【Linux】基础:进程的概念
  17. 30天30队:2013-14季,俄克拉荷马州雷霆
  18. 使用wireshark对grpc的helloworld抓包分析
  19. CiteSpace分析文献(二)
  20. pytorchtf等 深度学习实验管理工具(Sacred)

热门文章

  1. Framework7:不会Objective-C,也能开发iOS7应用
  2. 大数据虚拟化零起点-5基础运维第四步-部署vSphere Big Data Extensions 1.0 vApp
  3. python 下载阿里云mysql的备份文件及binlog到本地
  4. 后盾网lavarel视频项目---3、lavarel中子控制器继承父控制器以判断是否登录
  5. Linux vim 梳理
  6. 【爬虫】-爬取食品检验结果
  7. iTOP-4412开发板驱动lcd显卡以及linux开机log的修改方法
  8. Spring学习五(JDBC支持)
  9. 操作系统 chapter 12 死锁
  10. PHP-FPM进程数的设定