当前位置: 首页 > article >正文

Android Retrofit源码分析(一):Retrofit是什么?和OkHttp的区别是什么?为什么需要他?

目录

在这里插入图片描述


一、Retrofit是什么?

Retrofit是一个基于OKHttp的RESTful网络请求框架,由Square公司开源,专为Android和Java提供类型安全的HTTP客户端。它可以理解为OKHttp的加强版,底层封装了OKHttp,主要负责网络请求接口的封装,使得网络请求工作更加简洁高效。

简单来说,Retrofit是OkHttp的封装,但他没有任何的网络请求功能,他只是对请求前,请求后的数据过程进行封装,网络请求功能还是在OkHttp里面。


二、为什么会出现Retrofit?它的作用是什么?

2.1 OkHttp使用上的缺陷

以前我们使用OKHttp发起请求,需要创建request,指定域名等等,每次发送请求,都需要些一大堆的内容。不够简单,不够复用。比如下面的代码,每次发送请求,都需要我们写一次Request。并且请求回来的内容,我们都需要对Response进行解析转换。

val client = OkHttpClient()
		//1. 每次请求都需要创建request来指定url,参数等。
        val request = Request.Builder()
            .url(url)
            .build()

        var startTime = System.currentTimeMillis() 

        client.newCall(request).enqueue(object : Callback {
   
            override fun onFailure(call: Call, e: IOException) {
   
                val endTime = System.currentTimeMillis()
                val duration = endTime - startTime
                callback(null, duration) 
                e.printStackTrace()
            }

            override fun onResponse(call: Call, response: Response) {
   
                val endTime = System.currentTimeMillis()
                val duration = endTime - startTime

                if (response.isSuccessful) {
   
                    // 2. 读取响应体,并且是Response类型的,还需要进行解析,我们希望能够得到指定类型的bean。
                    response.body?.string()?.let {
    responseBody ->
                        callback(responseBody, duration) 
                    }
                } else {
   
                    callback

http://www.kler.cn/news/317142.html

相关文章:

  • 计算机网络34——Windows内存管理
  • 速盾:网站使用 CDN 加速
  • Redis的分布式部署
  • AI大模型日报#0923:李飞飞创业之后首个专访、华为云+腾讯音乐发布昇腾适配方案
  • 基于MaxScale搭建MariaDB读写分离集群的方法【2024年最新版】
  • 深度学习(一)——CMC特刊推荐
  • 统一网关--gateway(仅供自己参考)
  • 深入探究PR:那些被忽视却超实用的视频剪辑工具
  • ES解说!
  • 【重学 MySQL】三十七、聚合函数
  • 【第十二章:Sentosa_DSML社区版-机器学习之回归】
  • expressjs 和 Router 配置 POST 请求
  • 智能算法躲避拥堵,高德企业用车上线“动态选路服务”为出行提效
  • Redis常用数据类型
  • 自动化测试常用函数
  • 数据结构 ——— 算法的空间复杂度
  • 使用 HFD 加快 Hugging Face 模型和数据集的下载,解决443报错
  • 逗号运算符
  • git报错:无法读取远程分支 ‘origin‘ does not appear to be a git repository
  • MySQL—多表操作详解
  • 【CSS in Depth 2 精译_038】6.2 CSS 定位技术之:绝对定位
  • 使用SBP打AssetBundle时脚本引用丢失
  • [Linux]ubuntu安装nvidia显卡驱动登录后黑屏
  • 通过 Flink 的火焰图定位反压
  • LabVIEW提高开发效率技巧----合理使用数据流与内存管理
  • MySQL篇(管理工具)
  • CPLD 工程师面试题
  • springboot结合p6spy进行SQL监控
  • Hadoop 性能优化高频面试题及答案
  • XSS—xss-labs靶场通关