简述:
Retrofit是一个Android网络框架,是一个对OKHttp框架的简单封装,所以其内部实现原理实
际上也基于OKHttp的请求方式的。
Retrofit采用注解方式开发,通过注解构建不同的请求和请求的参数,省去了创建大量类似的
请求和方法,实际上这些参数最终都会在OkHttp中组合成一个完整的Http的请求(包括请求的头和请求体),
并通过OkHttp框架进行发送。
1.网络请求:
真正执行网络请求的还是OkHttp的Call对象:
1.同步请求为call.execute();
2.异步请求为call.enqueue();
2.网络请求流程梳理:
a.通过解析 网络请求的接口的注解 配置 网络请求参数
b.通过 动态代理 生成网络请求对象
c.通过 *网络请求适配器* 将 网络请求对象 进行平台适配
d.通过 *网络请求执行器* 发送网络请求
e.通过 *数据转换器* 解析服务器返回的数据
f.通过 *回调执行器* 切换线程(子线程->主线程)
g.用户在主线程处理返回结果
上述2角色解析
3.网络请求适配器:
CallApdater就是Call的适配器,retrofit兼容各种平台,CallApdater,如Guava、java8、RxJava、RxJava2、Scala等
Java8CallAdapterFactory其他同理 ExecutorCallApdaterFactroy是Android默认。
4.网络请求执行器:
创建处理的Call对象,它的作用就是创建Http请求,retrofit默认使用的就是OKhttp3.call。
5.数据转换器:
服务器返回的数据各种各样,retrofit为我们封装了各类数据的转换器,将返回数据解析成我们需要的数据类型;
如Guava、java8、jaxb、Scalars等 GsonConverterFactroy其他同理
Refrofit的数据转换的流程:(JavaBean类型)
a.拿到某个ApiService方法的返回值JavaBean类型returnType(ServiceMethod中的getGenericReturnType()方法)。
b.根据returnType的信息,通过ConvertFactory找到一个对应的Converter。
c.将OKhttp的数据源 转换成returnType类型的数据。
返回json中有非常字符解决方案:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())//重点
.build();
6.回调执行器:
它的主要作用就是线程转换,把子线程切换到主线程,将最后的OKhttp的请求结果通过
callbackExecutor使用回调给handler