基本介绍
官网及Github:
Retrofit是一个Android和Java上的类型安全的HTTP客户端(其实Retrofit只是一个基于OkHttp的网络请求框架,真正进行网络操作的是OkHttp
)。
基本使用可以看官网就可以。
项目说明及如何使用:
|
|
Retrofit注解:
Http请求方法:
名称 | 说明 |
---|---|
GET | GET请求 |
POST | POST请求 |
PUT | PUT请求 |
DELETE | DELETE请求 |
PATCH | PATCH请求 |
HEAD | HEAD请求 |
OPTIONS | OPTIONS请求 |
HTTP | 自定义请求,也可以是以上请求 |
标记类:
名称 | 说明 |
---|---|
FormUrlEncoded | 表示请求体使用 form URL encoding , Fields应该被声明为参数,并且用 @Field 注解修饰。使用这个注解的请求将被当做 application/x-www-form-urlencoded MIME类型。根据 RFC-3986,在 URI-encoded之前字段名和字段值将被UTF-8编码。 |
Multipart | 表示请求体是 multi-part, Parts应该当做参数声明,并且使用 @Part 注解修饰。(Content-Type:multipart/form-data) |
Streaming | 表示响应体的返回数据将会用流的形式返回。(如果没有使用该注解,默认会把数据全部载入内存) |
参数类:
名称 | 说明 |
---|---|
Header | 替换Header相应的目标为指定的值。传递列表或者数组将导致多个同名header且值为列表或者数组中的每一个非空数据。 |
HeaderMap | 在指定的Map中添加Headers |
Headers | 在方法上使用,会逐条的添加提供的 headers。注意: Headers不会重写,相同名字的header将会被包含在请求中。 |
Body | 当你想直接控制一个POST/PUT请求的请求体的时候,使用这个注解在接口方法上(替代被当做请求参数或者表格样式的请求体)。这个对象将会使用Retrofit的Converter实例序列化同时结果将会直接被设置成请求体。不能为空。 |
Field | 用于表单编码请求的命名对。值使用String.valueOf(Object) 被转成字符串 ,然后用表单url编码。null值将会被忽略。如果传List或数组将导致多个字段且值为所有List或数组中的非空值。查看说明1. |
FieldMap | 用于表单编码请求的命名键/值对。 |
Part | 表示一个 multi-part 请示的一个part。 |
PartMap | 如果一个参数使用这个注解修饰,将会有以下三种方式处理:说明2: |
Path | URL段中的占位符。值将会通过 String.valueOf(Object) 转成字符串并且 URL编码。说明3: |
Query | Query参数将会被添加到URL之后。值使用String.valueOf(Object) 被转成字符串 ,然后用表单url编码。null值将会被忽略。如果传List或数组将导致多个字段且值为所有List或数组中的非空值。说明4: |
QueryMap | Query参数的所有键和值都会被添加到URL的后面。说明5: |
QueryName | 用来修饰没有值的请求参数,将会被添加到URL的后面。 |
Url | 设置URL,和 base URL相对立。baseUrl说明: |
- 说明1:
|
|
调用foo.example("Bob Smith", "Jane Doe")
会产生一个请求体:name=Bob+Smith&name=Jane+Doe。
说明2:
- 如果是
MultipartBody.Part
类型将会直接使用内容,并省去注解名(例:@Part MultipartBody.Part part
)。 - 如果类型是
RequestBody
参数的值将会和它的内容类型直接被拿来使用。提供part名在注解中(@Part("foo") RequestBody foo
)。 - 其他的对象类型将会使用 converter转成合适的形式。提供part名在注解中(
@Part("foo") Image photo
)。
如果值为空,则在请求体中省略相应的参数。
- 如果是
|
|
- 说明3:
|
|
- 说明4:
|
|
- 说明5:
|
|
- baseUrl说明:
|
|
Converter解析:
Converter源码:
|
|
自定义Converter:
- 以
GsonConverterFactory
为例说明: - GsonConverterFactory.java
|
|
- GsonRequestBodyConverter.java
|
|
- GsonResponseBodyConverter.java
|
|
CallAdapter解析:
CallAdapter源码:
|
|
自定义CallAdapter:
- 以
RxJavaCallAdapter
为例说明: - RxJavaCallAdapter.java
|
|
- RxJavaCallAdapterFactory.java
|
|
整体流程分析:
代码定义:
|
|
API接口方法定义:
- 给接口服务方法添加相应的方法注解和参数注解:这些注解会在ServiceMethod类中获取。
创建Retrofit:
- Retrofit是在Retrofit的静态内部类Builder的build()方法中创建的。
|
|
- Platfrom相关代码:
|
|
- ExecutorCallAdapterFactory相关代码:
|
|
创建GitHubService:
- 调用Retrofit的create方法,并传入服务接口类的类型
|
|
- 调用RxJavaCallAdapter的adapt方法:
|
|
- ServiceMethod中保存了请求和返回的Converter类型
执行请求并接收返回结果:
调用动态代理类的相应方法:
上面已经讲解
Retrofit独立封装:
不贴代码了,直接上Github地址。
Retrofit和RxJava2封装:
==正在研究中,还没搞定==
Retrofit和RxJava2封装:
==计划中==