浅浅分析一下Retrofit

浅浅分析一下Retrofit

文章目录

  • 浅浅分析一下Retrofit
    • 简单介绍
    • 示例
      • 根据接口创建Java接口:
      • 创建retrofit对象,并生成接口实现类对象
    • 注解
      • 请求类注解
      • 参数类注解
      • 标记类注解
      • 注解解析
    • 好处

​ 要想实现和服务器的通信,我们需要使用通讯间的协议来进行请求,最常见的协议是HTTP协议。

​ 安卓实现网络协议的方法有很多,因为最底层的网络实现很麻烦,现在我们会使用已经封装好的第三方库,比如上节课讲的okhttp就是其中很受欢迎的一个。而Retrofit又是后来基于OkHttp封装的一个网络请求框架,也是由square公司贡献的一个处理网络请求的开源项目。不过既然是它的上层框架,自然在某些方面能做得比okhttp更好一些。也因此现在很多项目都用的retrofit。

​ 比如说,okhttp使用过程中接口配置繁琐,每发起一个请求都要新建一个Request,当要配置复杂请求(body,请求头,参数)时尤其复杂,一堆代码。而Retrofit可以在接口中声明同一个服务器的众多接口,接口请求更加简便,标注注解@GET、@POST、@Path、@Body等就形成一个网络请求,使用的时候只需要新建一个request就可以与众多接口连接!

​ 那就请速速进入retrofit的学习叭!

简单介绍

​ Retrofit采用的是动态代理模式,动态代理就是可以在运行期动态创建某个interface的实例,会按照所传进来的参数进行相应的处理。每当不同接口方法执行时,动态代理都会拦截该请求,对接口中的注解,参数进行解析,构建出不同的Request,最后则交给OkHttp去真正执行。

image-20220327125709384

​ Retrofit使用注解+java接口来定义后台服务API接口。

示例

​ 这里的示例只是为了讲解更加清晰,并不包含retrofit使用的完整操作。

根据接口创建Java接口:

​ 例如:

接口url:http://www.httpbin.org/get
服务器域名:http://www.httpbin.org/

​ 接口:post

​ 参数:username,password

接口url:http://www.httpbin.org/get

​ 接口:get

​ 参数:username,password

在创建Retrofit实例时通过.baseUrl()设置 +网络请求接口的注解设置

public interface  HttpbinService {//http://www.httpbin.org/post  username = username;@GET("get")//表明下面的方法会用get方式来进行网络请求//get方法要用@Query注解//方法名无所谓 看注解Call<ResponseBody> get(@Query("username")String username, @Query("password")String pwd);@POST("post")//post方法有表单提交\multipart方式提交 定义了提交数据的方式//请求方式不同 注解也不同哦//表单方式主要针对字典或元组方式的参数,非表单主要针对字符串类型的参数@FormUrlEncoded//定义参数。Post接口定义参数,要写@Field注解,需要传递一个字符串,这是请求接口的时候参数的名字//注意分清形参的名字和请求的参数名字Call<ResponseBody> postForm(@Field("username")String username,@Field("password")String pwd);
}

如果使用原始的retrofit使用方法的话,接口返回的是call类型,要带个尖括号<>,里面带泛型,这里写ResponseBody。

(ResponseBody是okhttp3包里面的,Call是retrofit包里面的,不要导错了嘿)

创建retrofit对象,并生成接口实现类对象

retrofit和http一样也是用的构建者模式进行管理。什么是构建者模式呢?大概是说的一个类内部很复杂,要正常使用的话要去理解这个类内部的原理,为了使用者能够更好地使用和管理它,就按部就班的来动态表示。

Retrofit retrofit = new Retrofit.Builder()//服务器域名.baseUrl("http://www.httpbin.org/").build();
HttpbinService httpbinService = retrofit.create(HttpbinService.class);

但是我们前面有提到,retrofit有个优势就是只要创建一个就可以使用多次。

所以如果在oncreate方法把他创建一次,就可以使用多次啦。

就像下面这样

在你的网络请求方法里面

retrofit2.Call<ResponseBody> call = httpbinService.post("mqh", "123456");
call.enqueue(new retrofit2.Callback<ResponseBody()){@Overridepublic void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {}@Overridepublic void onFailure(Call<ResponseBody> call, Throwable t) {Log.e(TAG, "onFailure: 请求失败" );}
}

注解

​ Java注解用于为Java代码提供元数据。元数据呢,是描述数据的数据,主要用来描述数据属性的信息。既然是描述信息,作为元数据,注解不直接影响代码执行,但也有一些类型的注解可以用于影响代码执行。

​ 我们可以暂且把注解看做是标签。

请求类注解

http协议的注解有几种,这里就分了几种。

img

​ 我们平时用的多的是get和post

​ get一般我们用来向服务器获取信息,post一般用于提交信息去服务端。

​ 但是在安卓,大部分情况不管是查询信息还是提交信息都用post。

注解类型作用
@GET方法注解表明HTTP请求方法为GET,(可选)注解的value属性用来设置相对/绝对url
@POST方法注解表明HTTP请求方法为POST,(可选)注解的value属性用来设置相对/绝对url

​ 留意HTTP注解,可替换以上所有的注解。

@HTTP(method = "get", path = "get", hasBody = false)

参数类注解

添加参数的时候要用到它

这里列出部分,更多的可以自行冲浪搜索。

注解类型作用
@Query参数注解用于get中请求参数
@Field参数注解多用于post中请求参数,以表单形式传送数据,需要与FormUrlEncoded结合使用
@Body参数注解用于非表单请求体
@Url参数注解HTTP请求的url路径(相对/绝对),可以包含{path_holder},如:http://xxx.com/{user_holder}/detail
@FieldMap参数注解以map形式传入的form表单参数
@Header参数注解表明此参数用作HTTP请求的header,key为注解的value值
@HeaderMap参数注解以map形式传入的多个header键值对

标记类注解

img

@FormUrlEncoded
表示发送form-encoded的数据,每个键值对需要用@Filed来注解键名,随后的对象需要提供值。

注解解析

如果你下载了retrofit的包,查看它的代码,你会发现它里面有很多注解的声明。

比如说@HTTP的声明,里面写有它的属性并且可以赋默认值。

而我们发现定义这个注解时,它的前面还用到了其他的注解。

称为元注解,给注解进行注解。

Retention表明了生命周期,Target表明了注解的使用场景限定,比方说可以给方法进行注解,给参数进行注解。

image-20220327121121150

好处

okhttp代码段长 次数多

retrofit可集中管理,而且便于修改

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/30774.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅浅分析滤波器截止频率

截止频率是描述滤波器性能的一个指标。对于一个滤波器&#xff0c;在其输入信号幅度保持不变的情况下&#xff0c;只改变输入信号的频率&#xff0c;当其输出信号幅度下降为输入信号幅度的0.707倍时&#xff0c;此时的频率即为该滤波器的截止频率。 一、理论分析 对于上图所示…

浅浅的介绍一下STL

1.什么是STL STL 全称 (Standard Template Library)&#xff0c;就是标准模板库&#xff0c;说人话就是C标准里帮我们写好了一些经常用到的东西&#xff0c;其中包括容器&#xff08;就是存东西的&#xff09;、算法&#xff08;例如之前学过的sort &#xff09;、迭代器&#…

浅浅的计算机网络知识

目录 计算机网络&#xff08;连接分散计算机设备以实现信息传递的系统&#xff09;_百度百科 传输协议 传输层次 通信 计算机网络协议分层结构 开放系统互连参考模型的特点 IPv4协议 IPv6协议 FTP HTTP 网络传输协议 较为系统框架 先面向百度搭建理解框架 计算机网…

浅浅理解一下堆

目录 一、堆的定义及本质 二、堆的核心操作 1、向下调整 2、堆的创建 3、向上调整 三、堆的比较器传入及堆中简单函数的实现 四、堆的应用 1、用于OS调度进程 2、topk问题 3、堆排序 一、堆的定义及本质 堆在Java中是以优先级队列来表现的&#xff08;PrityQueue&#…

浅浅的复习一下sql

DISTINCT 语法&#xff1a; SELECT DISTINCT 列名称 FROM 表名称1、现在有一个表如下&#xff1a; 2、执行sql语句-1 SELECT DISTINCT ename,email FROM emp 结果&#xff1a; 说明&#xff1a;由于小刘的ename和email重复了&#xff0c;所以结果只显示一次&#xff01; 3…

浅浅仿制一个APP首页

一、实验目标 做一个APP首页&#xff0c;包括顶部图片、顶部菜单栏、中部消息模块、底部Tab按钮。学习 ScrollView, RelativeLayout&#xff0c;以及插件之间的穿插使用。 二、实验步骤 列出实验的关键步骤、代码解析、截图。 1.逻辑梳理 做一个app首页&#xff0c;包括顶部…

花嫁之容氏浅浅最后怎么样了_花嫁之容氏浅浅章节目录阅读

花嫁之容氏浅浅小说完整版无弹窗在线阅读。花嫁之容氏浅浅小说是作者&#xff1a;许暖暖创作完成的一本热门玄幻灵异小说&#xff0c;主要讲述女主舒浅和鬼王容祁两人的精彩故事。梦里&#xff0c;舒浅感受到一双冰冷的手在自己身上游走&#xff0c;可是即使这样&#xff0c;舒…

干货文章 | 低代码真的有价值吗?

作者&#xff1a;瀚码技术钟惟渊&#xff08;第⼀作者&#xff09;、独⽴顾问王甲佳&#xff08;第⼆作者&#xff09;、瀚码⼀⼑云叨叨AI助⼿&#xff08;第三作者&#xff09; 全文共4912字&#xff0c;阅读约需要15min 本系列文章由瀚码技术钟惟渊构思、制定大纲、组织了关…

零信任落地实践【新世界】

&#x1f315;写在前面 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; ✉️今日分享&#xff1a; 莫道前路多险阻&#xff0c;再闯关山千万重 &#x1f340; 前言 轻舟已过万重山&#xff0c;始终不忘初心。在网络安全领域&#xff0c;我们…

神龙显灵-走进中国传统节日二月二龙抬头

二月二龙抬头&#xff0c;是中国传统的节日之一&#xff0c;也是春节的收官之战。这个节日被视为一个转折点&#xff0c;标志着春天的到来&#xff0c;也为农民们带来了新的希望和期待。 二月二这个日子有很多习俗和传说&#xff0c;其中最著名的就是“龙抬头”。据传说&#…

盘古大模型,让人人实现数字人自由

编辑&#xff1a;阿冒 设计&#xff1a;沐由 就在华为开发者大会2023 < HDC.Cloud 2023 > 正式开启的前夜&#xff0c;一则重磅消息从海外传来&#xff1a; 国际顶级学术期刊《自然》&#xff08;Nature&#xff09;杂志正刊发表了华为云盘古大模型研发团队研究成果——《…

奥运礼服设计师:AIGC 让童装设计从绿皮车进入高铁时代

近日&#xff0c;由温州 AIGC 产业联盟、温州市服装商会共同发起的“首届温州鞋服产业 AIGC 设计大赛”活动正如火如荼进行。大赛聚焦 13 岁青少年服饰设计这一行业存在已久的难题&#xff0c;探讨如何利用 AIGC 热门工具解决青少年服装设计痛点。据巴比特了解&#xff0c;该活…

每日互动(个推)CTO叶新江:AIGC时代,大模型推动数据要素商业化

ChatGPT在一夜之间火爆互联网&#xff0c;让AIGC受到世界范围内的高度关注。时至今日&#xff0c;AIGC热度持续高涨&#xff0c;各大互联网公司争相布局这一领域。日渐成熟的技术、显著的降本增效优势以及日益增长的市场需求等因素&#xff0c;已经推动AIGC成为互联网公司新一轮…

YEF 2023 18日开幕,逾千青年精英齐聚话“突围”

YEF2023 18日在温州开幕&#xff0c;在CCF YOCSEF创建25周年之际&#xff0c;逾千名计算机相关的学术、技术、产业、媒体、社会组织中的青年人才&#xff0c;汇聚温州鹿城区&#xff0c;一起回望、一起思辨、一起突围。 5月18日上午&#xff0c;由CCF主办&#xff0c;温州市人民…

AI大模型迈入应用时代,每日互动推动“可控大模型”落地

垂直行业更需要可控大模型 当下&#xff0c;大模型正在不断精进&#xff0c;以GPT-4、文心一言为代表的大模型&#xff08;LLM&#xff09;表现出了强大的逻辑推理能力&#xff0c;并能够很好地处理复杂任务&#xff0c;使得社会生产力得到了飞跃式提升。 面对大模型热度的持…

喜报 | 客户赞誉!获温州银行授予优秀供应商证书

近日&#xff0c;温州银行金融科技部在杭州、温州两地同时展开2022年度供应商表彰活动&#xff0c;意在鼓励先进、鼓舞干劲。擎创科技作为温州银行长期合作的供应商之一&#xff0c;凭借在智能运维领域精研的技术优势及“以客户成功为本”的服务价值观&#xff0c;深得客户青睐…

数画自研chatgpt,imagegpt人工智能语言技术,颠覆对AI绘画的认知

2023年1月1日&#xff0c;数画AI绘画又爆火了&#xff0c;这一次是数画团队自研了chatGPTimageGPT人工智能技术&#xff0c;值得人们注意的是&#xff0c;并非引用海外的openAI人工智能语言模型&#xff0c;而是完全自研首发的国产人工智能技术&#xff0c;数画团队来自于温州专…

使用SVG.Net生成svg格式文字图片

由于项目需要&#xff0c;需生成svg格式文字图片&#xff0c;网上的文档较少&#xff0c;在一番查阅之后成功实现。现记录下来&#xff0c;方便以后自己查阅&#xff0c;以及需要的人也可当做参考&#xff0c;水平不高&#xff0c;少喷。 主要运用到GitHub开源项目: svg.net 不…

利用ps导出svg(主要用于上传自定义图标到iconfont)

ps版本&#xff1a;2020 借鉴文章&#xff1a;https://blog.csdn.net/k912120/article/details/118787809 事情起因是我不想多此一举下个AI,本来想ps直接导出svg格式,但是导出来上传到iconfont后却是一片空白&#xff0c;相信很多人第一次都遇到过这种情况。 我一愣&#xff…

将图片转化成SVG格式(亲测可行)

1.准备好要转化的图片 可以看到左侧图片是一个jpg格式的&#xff0c;接下来我们就把它转化成svg格式; 2.打开SVG在线编辑器&#xff0c;把图片导入 我们可以打开SVG在线编辑器&#xff0c;在SVG编辑器中导入图片并根据我们需要的大小进行设置&#xff0c;如下图&#xff1a; …