前两篇分析了Retrofit的配置和创建,这篇分析Retrofit的调用,先模拟一个调用的场景,代码如下:
默认看这篇文章的用户已经读过配置篇及创建篇,这个时候已经获取了HttpService的代理对象了
public interface HttpService {
@FormUrlEncoded
@POST("/App/Login.ashx")
public Observable<User> login(@FieldMap Map<String, String> params);
}
以上是一个接口,里面包含了一个login方法,现在开始模拟一个login的调用,代码如下:
httpService.login(params)
现在场景已经模拟出来了,那么回顾创建篇中的Retrofit.create(HttpService.class)所做的事情,代码如下:
return之前的方法在创建篇已经做过分析,现在来分析return的相关代码,这里可以看到在create的时候返回了一个动态代理。
那么现在明确了,当login方法被调用的时候,代理对象会调用它的invoke方法,我们主要分析loadMethodHandler方法,以下是相关代码:
invoke中的前两个if在当前流程不会进入,略过。
以上这段代码在昨天的创建篇中已经分析过了,现在就不做具体分析了,在这个方法掉用的过程中获取了CallAdapter、Converter、RequestFactory对象,接着分析invoke方法,代码如下:
看以上代码中callAdapter.adapt方法调用,在创建篇中我们已经知道普通的调用流程获取的CallAdapter的实际类型是SimpleCallAdapter,现在就可以解释创建篇中SimpleCallAdapter的adapt实现的逻辑了,以下是相关代码:
以下代码回调了OkHttpCall对象的execute方法,访问网络获取数据
我们在创建篇已经获取了OkHttpCall请求时用到的所有数据,因此这里可以直接拿来用,细节上就不做太多解释了。
Retrofit的配置、创建、调用的基本流程大概就是这样,后面有空再分析下其他细节上的东西。