Retrofit原理

1、简介

Retrofit 是基于OKhttp网络请求框架的二次封装,本质是OKhttp。所以说Retrofit并不是一个网络框架、它只是一个网络框架封装。
Retrofit优点:API设计简洁易用、注解化配置高度解耦、支持多种解析器、支持Rxjava。

2、常用到的注解

@Hearder : 请求头
@GET、@POST:确定请求方式
@Path:请求URL的字符替代
@Query:要传递的参数
@QueryMap:包含多个@Query注解参数
@Body:添加实体类对象
@FormUrlEncoded:URL编码
@Multipart :用于表单的请求

3、用法

创建接口请求类型与参数:
新建DataModel类和Cinterface接口
@GET("这个里边放链接")
public Call<DataModel> login(@Query("username") String username, @Query("pwd") String pwd);

创建Retrofit对象、设置数据解析器
Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(“配置域名”)
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) //rxjava回调库
            .addConverterFactory(GsonConverterFactory.create())  //解析类型
            .build();

4、简单看了一下源码了解了一下它的原理

首先它通过建造者模式构建一个Retrofit实例,配置baseUrl,callAdapterFactory(RxJava回调库),converterFactory(解析接口的类型我一般通的是GsonConverterFactory),在通过Retrofit对象的create(Class service)方法返回一个Service的动态代理对象,调用代理的invoke方法的时候,会将method进行解析,解析我们在接口里面配置的各种注解,最后构造成ServiceMethod对象,并将结果缓存起来,下次再次调用就不用解析了。ServiceMethod对象可以生成Request对象,所以将ServiceMethod对象注入到OkHttpCall,然后通过callAdapter转化为用户希望得到的返回对象,默认是直接返回Call对象。
再调用execute或者enqueue方法,前者是同步请求,后者是异步请求,再方法里面会调用Okhttp的网络请求方法。接下来就是okhttp的一些原理的okhttp我就先不聊了。

上一篇:android – Retrofit RxJava – 如果我使用了Disposable.dispose(),那么当片段恢复时不会发光


下一篇:android – 使用Retrofit进行连续的api调用并返回observable