androidretrofit(androidretrofit详解)

本篇文章给大家谈谈androidretrofit,以及androidretrofit详解对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

【Android】Retrofit网络请求参数注解,@Path、@Query、@QueryMap...

对Retrofit已经使用了一点时间了,是时候归纳一下各种网络请求的service了。

下面分为GET、POST、DELETE还有PUT的请求,说明@Path、@Query、@QueryMap、@Body、档猛@Field的用法。

{资讯id}

类型1

{资讯id}/{类型}

{资讯id}

;type= 类型1

{资讯id}type={类型}

;type= 类型穗蠢数1...

{资讯id}type={类型}...

也可以

{newsId}

{newsId}?access_token={access_token}

{newsId}?access_token={access_token}

{commentId}

{commentId}?access_token={access_token}

CommentBody :需要提交的内容,与 Post 中的 Body 相同

{accountId}

@Path:所有在网址中的参数(URL的问号前面),如:

{accountId}

@Query:猜首URL问号后面的参数,如:

{access_token}

@QueryMap:相当于多个@Query

@Field:用于POST请求,提交单个数据

@Body:相当于多个@Field,以对象的形式提交

Tips

[img]

Android Retrofit详解

Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装,网络请求的工作本质上是 OkHttp 完成,而 Retrofit 仅负责 网大知络祥橘请求接口的封装

1.添加Retrofit库的依赖:

后面三个是可选的,分别是数据解析器和gson,以及rxjava支持的依赖

2.创建 用于描述网络请求 的接口

Retrofit将 Http请求 抽象成 Java接口:采用 注解 描述网络请求参数 和配置网络请求参数

3.创建Retrofit实例

4.发送请求

请求分为同步请求和异步请求

response.body()就是Reception对象,网络请求的完整 Url =在创建Retrofit实例时通过滚宴消.baseUrl()设置 +网络请求接口的注解设置(下面称 “path“ )

整合的规则如下:

上面我们用了@GET注解来发送Get请求,Retrofit还提供了很多其他的注解类型

1.@GET、@POST、@PUT、@DELETE、@HEAD分别对应 HTTP中的网络请求方式

2.@HTTP替换@GET、@POST、@PUT、@DELETE、@HEAD注解的作用 及 更多功能拓展

具体使用:通过属性method、path、hasBody进行设置

1.@FormUrlEncoded

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

2.@Multipart

表示发送form-encoded的数据(适用于 有文件 上传的场景),每个键值对需要用@Part来注解键名,随后的对象需要提供值。

1.@Header @Headers

添加请求头 添加不固定的请求头

2.@Body

以 Post方式 传递 自定义数据类型 给服务器,如果提交的是一个Map,那么作用相当于 @Field,不过Map要经过 FormBody.Builder 类处理成为符合 Okhttp 格式的表单,如:

3.@Field @FieldMap

发送 Post请求 时提交请求的表单字段,与 @FormUrlEncoded 注解配合使用

4.@Part @PartMap

发送 Post请求 时提交请求的表单字段,与@Field的区别:功能相同,但携带的参数类型更加丰富,包括数据流,所以适用于 有文件上传 的场景,与 @Multipart 注解配合使用

5.@Query和@QueryMap

用于 @GET 方法的查询参数(Query = Url 中 ‘?’ 后面的 key-value)

如:url = ,其中,Query = cate

配置时只需要在接口方法中增加一个参数即可:

6.@Path

URL地址的缺省值

7.@Url

直接传入一个请求的 URL变量 用于URL设置

Android上使用retrofit+okhttp时token失效的处理方案

提前声明,以下提到的方案并没有去验证过可行性,只是记录一下,未来需要用到的时候,在仔细验证一下。

一般情况下,各个公司的移动端关于登录令牌(token)的设判激定都各不相同。

可先参考这个链接:

了解一下,本文大概想说什么。

有些公司服务端是按照oauth设计,比较标准规范,但是有些公司有自己的特定业务,未完全按照oauth来设计。基于本公司的业务逻辑,考虑了一下登录的逻辑以及token的设计。

思路如下:

token即验证令牌,每次请求都带上,refreshToken用来刷新token的,每次请求可以不带上,但是要放在移动端保存。

1.通过username,password获取token和refreshToken

2.token的有效期为2小时,refreshToken的有效期为15天

3.如果服务器端判断token过期,而refreshToken未过期,就返回错误码给客户端,则客户端通过一个特定的接口传入refreshToken参数获取新的token和refreshToken

4.如果连续15天未使用app或掘岩袜者用户修改了密码,则表示refreshToken过期了,则跳到登录界面,重新登录获取token和refreshToken

基于上面的思路,如果服务端走rest风格,移动端(Android)采用retrofit(v2.0+)+okhttp(v2.7.0+)网络请求框架。那么当token过期了,Android端应该如何处理呢?

通过okhttp提供的Authenticator接口,相关资料 点击这里 ,但是查看okhttp的源码会发现,只有返回HTTP的状态码为401时,才会使用Authenticator接口,如果服务端设计规范,枣毕可以尝试如下方法。

实现Authenticator接口

然后给添加给OkHttpClient

第一种方案就这样了。

但是,万事不会尽如人意,如果服务端在token过期的时候,不给返回401的HTTP状态码,而是返回如下类型的数据,叫你根据code判断。

这里要清楚HTTP状态码是指200,404,401这些,而上面的数据中的code是自定义的。如果在token过期时,服务端返回的是如上类型的数据,那么第一种方案就行不通。

通过okhttp的拦截器,okhttp 2.2.0 以后提供了拦截器的功能,相关介绍 点击这里

然后给okhttp设置拦截器

第二种方案的思路是通过拦截返回的数据,判断token是否过期,如果过期则进行一次刷新token的操作。

上面2种方案都没有进行实际验证过,希望以后有机会能验证。

完。。。

Android Retrofit2基础使用

我是个肤浅的人,这里不讲原理,我也不会,这里只有Retrofit2的常规使用

添加依赖没拆

Url示例枯链枣:

Url示例唤差: ;id=2id=3address_id=1

Android retrofit 注解@QueryMap和@Body的区别

如果你的项目是采用POST请求方式,不管是使用实体类还是使用HashMap最好采用@Body注解。虽然你使用QueryMap 可能也不会有什么问题(PS:这种共用的情况只适用于POST请求,GET请求不能使用@Body注解和培轿,否则会报错唤肆)。

使用retrofit这样框架快一年了,以前使用它传递参数时都是用@QueryMap注解传递,虽然知道这样不是很好,但是当时换框架的时候看到工作量太大就没有换成实体类形式了,之前的使用方式如下图:

2.由于最近中丛在研究java后台,搭建了一个SSM框架想测试一下;因为之前以为HashMap只能采用这种方式传递,在今天的测试中发现并不是,其实使用HashMap同样可以采用@Body注解,而且@QueryMap跟@Body的区别非常大,先看按之前的方式使用@QueryMa

3.上面是android的代码,使用了RxJava。在来看java后台的:

4.使用HttpServletRequest来接收是没有问题的,但是如果后台使用@RequestBody来接收参数就没法接收到了,而且连请求都没接收到:

5.下面我们来看一下,android Studio打印的日志,发现后台返回了400,并且发现参数拼接到连接后面了,这不是GET的传递参数的方式吗?但是我明明是POST注解请求:

6.我点击注解看了下源码,看到下面的注释,第一句的大意就是说:会把key和value拼接到url后面,所以才会出现刚刚日志中那种情况,而且看注释都是在讲GET请求下的使用,并没有POST的使用介绍,所以我感觉这个注解是主要为GET请求准备的:

7.在来看@Body,先看源码吧 ,注释的大体意思是:使用这个注解可以把参数放到请求体中,适用于 POST/PUT请求:

8.然后再看使用方式,和@QueryMap 一样的,而且它可以使用实体类,QueryMap 是不能注解实体类的:

9.在看打印的日志:

10.从日志看出来,这才是POST请求参数参数的方式。

总结一下:@QueryMap注解会把参数拼接到url后面,所以它适用于GET请求;@Body会把参数放到请求体中,所以适用于POST请求。

Android 关于 Retrofit 回调的正确处理方式

对于 Activity,发起网络请求后得到一个 null ,到底应不应该刷新列拿慧表?

或者说,应该如何处理 Retrofit 的回调才显得合理并且优雅呢?

这里进行了简单封装,参见 SimpleCallback ,只答敏逗需要一句话即可发起请求清卖并将结果通过 LiveData 传递出去。

activity_retrofit_callback.xml

RetrofitCallbackActivity.kt

关于androidretrofit和androidretrofit详解的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表