Android开发Retrofit提升

前言:

一不小心,前一篇关于Retrofit的文章 https://blog.csdn.net/qq_34942689/article/details/70052972 已经是17年初次学习的时候写的了,过了这么久再来写跟Retrofit相关的文章一是为了巩固,二是现在的项目也有用到。前面大概写了Retrofit简单的使用和GET 注解,现在往深一点介绍一下
一:注解 Retrofit2.0是在okhttp的基础上进行封装的,网络请求是通过okhttp实现的。Retrofit通过注解的方式,进行网络请求描述,其注解根据功能可分为三大类
1.方法类:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、HTTP
2.标记类:FormUrlEncoded、Multipart、Streaming
3.参数类:Headers、Header、Body、Field、FieldMap、Part、PartMap、Query、QueryMap、Path、URL

1:方法类: 其中除了HTTP之外的都比较基础,HTTP可以说是其他几个的总和:其可用于替代以上 7 个,及其他扩展方法;
有 3 个属性:method、path、hasBody。基础使用为

public interface APIService{
/**
* method  请求方法,不区分大小写
* path    路径
* hasBody 是否有请求体
*/
@HTTP(method = "get", path = "new/{id}", hasBody = false)
Call<ResponseBody> getNew(@Path("id") int id);
}

2:标记类: 针对某一个函数进行标记,表示其作用是什么。表单请求:FormUrlEncoded、Multipart,标记:Streaming
1:FormUrlEncoded:请求体是from表单
2:Multipart:请求体是支持文件上传的 From 表单
3:Streaming响应体的数据用流的形式返回未使用该注解,默认会把数据全部载入内存,之后通过流获取数据也是读取内存中数据,所以返回数据较大时,需要使用该注解
3: 参数类: 针对方法或者参数进行修饰的注解
1:Headers 作用于方法
2:Header、Body、Field、FieldMap、Part、PartMap、Query、QueryMap、Path、URL 作用于方法参数(形参)

@Headers 注解设置固定的请求头,所有请求头不会相互覆盖,即使名字相同

@Header 注解动态更新请求头,匹配的参数必须提供给 @Header ,若参数值为 null ,这个头会被省略,否则,会使用参数值的 toString 方法的返回值

@Body 非表单请求体;指定一个对象作为 request body 。作用:以 Post方式 传递 自定义数据类型 给服务器注意:如果提交的是一个Map,那么作用相当于 @Field

@Field 表单字段作用:发送 Post请求 时提交请求的表单字段具体使用:与 @FormUrlEncoded 注解配合使用

@FieldMap表单字段,与 Field、FormUrlEncoded 配合;接受 Map<String, String> 类型,非 String 类型会调用 toString() 方法

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

@Path作用:URL地址的缺省值

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

@Url作用:直接传入一个请求的 URL变量 用于URL设置Map 用来组合复杂的参数;

Query、QueryMap 与 Field、FieldMap 功能一样,生成的数据形式一样;

Query、QueryMap 的数据体现在 Url 上;

Field、FieldMap 的数据是请求体;

{占位符}和 PATH 尽量只用在URL的 path 部分,url 中的参数使用 Query、QueryMap 代替,保证接口的简洁;
Query、Field、Part 支持数组和实现了 Iterable 接口的类型, 如 List、Set等,方便向后台传递数组。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章