首页
学习
活动
专区
圈层
工具
发布

你真的会用Retrofit2吗?Retrofit2完全教程

前面写了你应该知道的HTTP基础知识 介绍了HTTP的相关知识,不知道那些想了解Retrofit的同鞋是不是去看了Retrofit的官方教程,曾经我在你真的会用Gson吗?...Gson使用指南(四) 中说当你了解了注解、反射、泛型、HTTP的内容只需要看一篇Retrofit的代码示例就可以轻松玩转Retrofit,不知道你玩转了没?...当然本篇文章会介绍得详细一点,不能写一篇水文,毕竟我给它命名为《你真的会用Retrofit2吗?Retrofit2完全教程》。...22个注解,为帮助大家更好理解我将这22个注解分为三类,并用表格的形式展现出来,表格上说得并不完整,具体的见源码上的例子注释。...6、自定义CallAdapter 本节将介绍如何自定一个CallAdapter,并验证是否所有的String都会使用我们第5节中自定义的Converter。

2.9K70

Retrofit解析6之面向接口编程

如果出现了在避免轮询或者失败重试的情况,可以 调用clone()方法 复制 可以对具有相同的web服务器进行 具有相同参数的 请求。...参数 是成功的响应体类型 看下他的方法 ? 方法.png 和大家设计的一样吗?...第二个问题 我是这样想的 首先上面说了,既然是适配,肯定要有一个方法要去做适配把Retrofit的Call适配成业务方自定义的"Call"。...再来看下他两个方法的注释 2、看下他的Type responseType()方法的注释 返回此适配器将HTTP响应body转换为Java对象时使用的类型。...—————————— 这个问题 我是这么想的 因为是给网络场景下的使用的,我的第一反应是写两个方法,一个方法是在请求的时候,写数据进行序列化的时候;还有一个就是在响应的时候, 读取数据进行反序列化的时候

1.3K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    入木三分:从设计者角度看Retrofit原理

    前言 通常我不喜欢去写分析源码类的文章,流水线式的分析 枯燥乏味,但读完Retrofit源码后让我有了改变这种想法的冲动~~ 一般来讲读源码的好处有两点: 熟悉代码设计流程,使用过程碰到问题可以更快速解决...说实话仅这一点无法激起我读源码的兴趣,毕竟以正确的姿态使用一个优秀的框架不应该出现这种问题。...一句话概括REST ful API:在我们使用HTTP协议做数据传输时应当遵守HTTP的规矩,包括请求方法、资源类型、Uri格式等等.....一时间讨论的好不热闹,有让把Body塞到Header里的,有让自定义拦截器、也有人直接怂恿改源码...但问题的本质不是后端先违反规则在先吗?两个人打架总不能把挨打的抓起来吧。...而Retrofit通过注解的形式将Request需要的必要信息全依附在方法上(还是个抽象方法,尽量撇除一切多余信息),作为使用者只需要调用对应方法即可实现请求。

    1.7K20

    是时候客观评价Retrofit了,这几点你必须明白

    : www.mylist.com/get{Id} 不支持或缺陷 Url不能为空 由于我的需求场景是固定的域是动态的吗,有时候我用www.myapi.com,有时候是www.youapi.com....我这有错吗 我写个接口,用实现类去执行,java告诉我这样不行了吗。蒙蔽了,抛异常了! API declarations must be interfaces. ?...不能用泛型,我开始蒙逼了,难道让我每个请求接口都写一个Api方法,虽然通过九牛二虎之力,用反射解决了,但我我真想说 :NND ?...,于是我下一个免登陆场景使用了此方案,token是服务器返回的字符串。...教你徒手实现自定义的Retrofit框架 Rxjava和Retrofit 需要掌握的几个实用技巧,缓存问题和统一对有无网络处理问题 Novate:对Retrofit2.0的又一次完美改进加强!

    1.6K20

    一起来写OKHttp的拦截器

    然而 Retrofit 内部请求也是基于 OKHttp 的,所以在做一些自定义修改 HTTP 请求时,需要对 OKHttp 拦截器具有一定了解。...相信熟悉 OKHttp 的同学都知道,OKHttp 内部是使用拦截器来完成请求和响应的,利用的是责任链设计模式。所以可以说,拦截器是 OKHttp 的精髓所在。...但是需要注意的是,假如现在有十多个 API 接口,每一个都需要传入 token ,难道我们去重复一遍又一遍吗? 相信有良知的程序员都会拒绝,因为这会导致代码的冗余。 那么有没有好的办法可以一劳永逸呢?...最后,在 OKHttpClient 中使用: OkHttpClient client = new OkHttpClient.Builder() .addNetworkInterceptor...最后,自定义拦截器的使用情景通常是对所有网络请求作统一处理。如果下次你也碰到这种类似的需求,别忘记使用自定义拦截器哦! 00:02 呃呃呃,按道理来讲应该要结束了。

    1.2K20

    Retrofit解析8之核心解析——ServiceMethod及注解2

    ,不过注释非常不错,我建议大家还是去看看,里面主要讲解拼接的注意事件。..., validateEagerly); } 先看下注释 通知使用配置过的值来创建Retrofit对象,如果没有调用client()和callFactory()方法,那么将创建并使用默认的OkHttpClient...代表DELETE请求, @retrofit2.http.OPTIONS 代表OPTIONS请求,通过使用@HTTP,你也可以自定义HTTP请求方式。...如果你想动态设置url,第一个入参需要使用@Url 注解来实现。可以在方法参数里面使用@Path注解,是实现替换Url部分内容,被替换的部分需要用大括号“{}”括起来,例如"{foo}"。...@multipart 代表多部分,在入参上使用注解@Part表示每一部分的具体数据。通过在方法上添加@Header 和@Header来添加请求头的数据。

    1.5K20

    Retrofit--合理封装回调能让你的项目高逼格

    绪论 前面我们讨论了使用Retrofit时怎样去设置OKHttp,包括持久化管理Cookie、设置网络超时、设置打印拦截器、设置缓存、Header等等,详细可查看 Retrofit–使用Retrofit...自定义响应体CallModel 很简单的实现了一个网络请求,当然我在刚开始的时候一直也都是这么使用的,因为Retrofit自己封装了JSON解析的过程,我们只需在建造Retrofit的时候加入addConverterFactory...Retrofit的CallBack,OnResponse()方法里面去判断网络请求正常的各种情况,onFailure()方法里面则是网络有问题会走该回调。...最后分享几个不错的Retrofit博客吧: 你真的会用Retrofit2吗?Retrofit2完全教程 深入浅出 Retrofit,这么牛逼的框架你们还不来看看?...Android Retrofit 2.0 使用-补充篇

    1.9K10

    用 AI 写代码一年后,Android 工程师的真实体验

    { 剩下的 AI 几乎可以全部帮你填完,而且效果相当不错。...以前写一个稍微复杂点的自定义 UI 组件要半小时,现在10分钟出头,剩下的时间用来改细节和调样式。...现在我的习惯是:写好一个接口的注释,让 AI 直接生成整个 Retrofit Service,包括参数类型和注解。准确率大概在 85% 以上,剩下的手动微调就行。 写单元测试也是一样。...把被测方法贴进去,让 AI 生成测试用例,它会自动处理 Mock 和边界情况,我只需要检查逻辑是否合理。这一块效率提升最明显,以前能拖就拖的测试,现在反而愿意写了。...有时候 AI 用了一个我不熟悉的写法,我得花时间搞清楚它在做什么,再决定要不要用。这个隐性成本不可忽视。 会被替代吗 被问过很多次:AI 会替代 Android 工程师吗?

    32510

    RxJava中级进阶--map和flatmap

    今天要介绍两个我认为是RxJava中最牛逼的Operator, map和flatmap。 在掌握map和flatmap的基础上,就可以去了解RxJava的核心操作 lift() 。...所谓的map(),可以理解为一对一的变换,这也是RxJava种最基础的变换。就像在地图上去按位置查找一样。 可能有同学要喷我说,这代码不是比之前还多了几行,更不软件工程吗?...使用map()之后的逻辑是在一个数据流上某个位置插入一个变换,让这个流的数据以新的方式向下派发,这是响应式/链式调用的思路。可以感受这种思维的差异。...这就是为什么我们要先熟悉 just/from/merge,map/flatmap,这些方法,再去了解 lift 的原因。 实际上在开发中掌握到 flatmap就能覆盖80%的业务需求了。...如果你感觉看不懂,欢迎留言不懂的地方,我尽力解释。 后面我们会分析lift和自定义操作符,希望能帮你打开新世界的大门。 源码可以后台回复"操作符"获取。

    2.7K30

    Android网络编程(十一)源码解析Retrofit

    前言 最近博客的产出确实很少,因为博主我正在写一本Android进阶书籍,两头很难兼顾,但是每个月也得至少发一篇博客。...上一篇我们介绍了Retrofit的使用方法,这一篇我们照例来学习Retrofit的源码。 1.Retrofit的创建过程 当我们使用Retrofit请求网络时,首先要写请求接口: ?...接下来查看build方法,代码如下所示。 ? 从注释1处可以看出baseUrl 是必须指定的。...注释2处callFactory默认为this.callFactory,this.callFactory就是我们在构建Retrofit时调用callFactory方法所传进来的,如下所示。 ?...注释1处调用了createCallAdapter方法,它最终会得到我们在构建Retrofit调用build方法时adapterFactories添加的对象的get方法,Retrofit的build方法部分代码

    1.2K70

    深入浅出 Retrofit,这么牛逼的框架你们还不来看看?

    1.3 Url 配置 Retrofit 支持的协议包括 GET/POST/PUT/DELETE/HEAD/PATCH,当然你也可以直接用 HTTP 来自定义请求。...而且根据不同的情况,有些字段可能不传,这与方法的参数要求显然也不相符。于是,打群架版本的 QueryMap 横空出世了,使用方法很简单,我就不多说了。...也正是因为这一点,我们可以通过这种方式来上传文件,下面我们就给出这个接口的使用方法: ?...2、Retrofit 原理剖析 前一个小节我们把 Retrofit 的基本用法和概念介绍了一下,如果你的目标是学会如何使用它,那么下面的内容你可以不用看了。...真是太贴心,Retrofit 提供了一个 MockServer 的功能,可以在几乎不改动客户端原有代码的前提下,实现接口数据返回的自定义,我们在自己的工程中增加下面的依赖: compile 'com.squareup.retrofit2

    4K60

    Android OkHttp+Retrofit+RxJava搭建网络访问框架(含源码)

    ,它和implementation其实差不多,只不过在依赖模块中你可以使用这个api。...OkHttp进行配置,注释已经写得很清楚了,我就也没有什么好说的。...你打开app的build.gradle就知道了,如下图所示: 我这里解释一下是为什么,随着Gradle版本的更新,以前的一些使用方式就弃用了,比如这个compile就过时了,因此在高版本中可以替换为...可以查看run里面的日志 还记得这是在那里添加的吗,没错就是请求拦截器里面。也别忘了在返回拦截器中打印了请求时间。...怎么证明了,还记得我在错误返回的时候打印的日志吗? OK,再切换到之前的网络看看。 这样就可以了,那么这篇文章就到这里了。

    4.5K31

    深入浅出 Retrofit,这么牛逼的框架你们还不来看看?

    1.3 Url 配置 Retrofit 支持的协议包括 GET/POST/PUT/DELETE/HEAD/PATCH,当然你也可以直接用 HTTP 来自定义请求。...而且根据不同的情况,有些字段可能不传,这与方法的参数要求显然也不相符。于是,打群架版本的 QueryMap 横空出世了,使用方法很简单,我就不多说了。...也正是因为这一点,我们可以通过这种方式来上传文件,下面我们就给出这个接口的使用方法: ?...2、Retrofit 原理剖析 前一个小节我们把 Retrofit 的基本用法和概念介绍了一下,如果你的目标是学会如何使用它,那么下面的内容你可以不用看了。...真是太贴心,Retrofit 提供了一个 MockServer 的功能,可以在几乎不改动客户端原有代码的前提下,实现接口数据返回的自定义,我们在自己的工程中增加下面的依赖: compile 'com.squareup.retrofit2

    2.2K60

    扔掉okhttp、httpClient,来试试这款轻量级HTTP客户端神器?

    但是在某些情况下,用户可能需要自定义OkHttpClient,这个时候,可以在接口上定义返回类型是OkHttpClient.Builder的静态方法来实现。...当然,我们也可以在配置文件中配置多个自定义的连接池,然后通过@RetrofitClient的poolName属性来指定使用。...当然,你也可以自定义实现自己的日志打印拦截器,只需要继承BaseLoggingInterceptor(具体可以参考DefaultLoggingInterceptor的实现),然后在配置文件中进行相关配置即可...@Degrade注解可以配置在接口或者方法上,配置在方法上的优先级更高。...如果方法的返回值类型为Retrofit.Response,则可以使用该适配器。 Retrofit自动根据方法返回值类型选用对应的CallAdapterFactory执行适配处理!

    2.9K30

    解决Retrofit多BaseUrl及运行时动态改变BaseUrl?

    的开发者应该知道 @Get , @Post 这些标注到每个接口方法上的注解不仅可以传相对路径,还可以传全路径,这样我们就可以做到不同的接口使用不同的 BaseUrl ,从而达到使用多个 BaseUrl...,所以很多请求图片等资源的接口都是使用这个方案(咦,看样子这个官方解决方案不是同时解决我提到的这两个问题吗,别急,先往后面看!)...对象,即不同的 BaseUrl 使用不同的 Retrofit 对象来创建 ApiService 进行请求,这样只要新增一个不同的 BaseUrl ,那就需要重新创建一个新的 Retrofit 对象 这样也可以同时实现...应用到不同的请求上,但我怎么知道什么请求需要什么样的 Host ,每个请求总要有个标记,让我知道他需要什么样的 Host 吧 于是我就在想 Retrofit 有什么方法,可以在请求之前给每个请求加上不同的字符串标记...,于是我很自然的想到了 Header ,Retrofit 正好有 @Headers 这个注解,可以给每个接口方法上加入自定义 Header 再次解决难点 我给需要不同 BaseUrl 的接口方法上加入了自定义的

    1.9K40

    破解 Kotlin 协程 - 入门篇

    那会儿还是很痛苦的,毕竟 kotlinx.coroutines 这样强大的框架还在襁褓当中,于是乎我写的几篇协程的文章几乎就是在告诉大家如何写这样一个框架——那种感觉简直糟糕透了,因为没有几个人会有这样的需求...需求确认 在开始讲解协程之前,我们需要先确认几件事儿: 你用过线程对吧? 你写过回调对吧? 你用过 RxJava 类似的框架吗?...上下文可以有很多作用,包括携带参数,拦截协程执行等等,多数情况下我们不需要自己去实现上下文,只需要使用现成的就好。...await 不会阻塞 UI 线程吗?...这时候也许大家还是有问题:我并没有看到 Continuation 啊,没错,这正是我们前面说的编译器黑魔法了,在 Java 虚拟机上, await 这个方法的签名其实并不像我们看到的那样: public

    72320

    破解 Kotlin 协程(1) - 入门篇

    那会儿还是很痛苦的,毕竟 kotlinx.coroutines 这样强大的框架还在襁褓当中,于是乎我写的几篇协程的文章几乎就是在告诉大家如何写这样一个框架——那种感觉简直糟糕透了,因为没有几个人会有这样的需求...需求确认 在开始讲解协程之前,我们需要先确认几件事儿: 你用过线程对吧? 你写过回调对吧? 你用过 RxJava 类似的框架吗?...上下文可以有很多作用,包括携带参数,拦截协程执行等等,多数情况下我们不需要自己去实现上下文,只需要使用现成的就好。...不会阻塞 UI 线程吗?...这时候也许大家还是有问题:我并没有看到 Continuation 啊,没错,这正是我们前面说的编译器黑魔法了,在 Java 虚拟机上,await 这个方法的签名其实并不像我们看到的那样: public

    1K00

    Retrofit使用教程(一)- Retrofit入门详解

    Json 数据或者上传文件 Retrofit的简单使用例子 要使用retrofit请求网络数据,大概可以分为以下几步 1)添加依赖,这里以AndroidStudio为例:在build.grale添加如下依赖...' 2) 创建Retrofit对象 Retrofit retrofit = new Retrofit.Builder() //使用自定义的mGsonConverterFactory...num=10&page=1,header为”apikey:81bf9da930c7f9825a3c3383f1d8d766”,我们可以这样请求: 第一步,在interface Api中 增加如下方法...可以通过@Body注释,直接传递一个对象给请求主体,Retrofit通过JSON转化器,把对象映射成JSON数据。...到后面学习的时候,发现retrofit的使用时 比较灵活的,并且使用方法也是相对较多的,于是,就写了retrofit这系列的使用博客。

    6.5K33
    领券