retrofit的基本用法:
1.interface
public interface GitHubService {
@GET("users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user);
}
2.创建interface实例
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.build();
GitHubService service = retrofit.create(GitHubService.class);
3.接口方法调用,返回http call。
Call<List<Repo>> repos = service.listRepos("octocat");
Each Call from the created GitHubService can make a synchronous or asynchronous HTTP request to the remote webserver.
每一个接口方法返回的call都可以向web服务器发起同步或异步http请求。
在retrofit的create函数中,核心代码是:
ServiceMethod serviceMethod = loadServiceMethod(method);
OkHttpCall okHttpCall = new OkHttpCall<>(serviceMethod, args);
return serviceMethod.callAdapter.adapt(okHttpCall);
ServiceMethod
类图:
这个类的介绍: Adapts an invocation of an interface method into an HTTP call. 把接口方法的调用适配成HTTP call需要的形式。
ServiceMethod的内部类Builder用来构造ServiceMethod,它的build方法中核心代码:
callAdapter = createCallAdapter();
responseType = callAdapter.responseType();
responseConverter = createResponseConverter();
for (Annotation annotation : methodAnnotations) {
parseMethodAnnotation(annotation);//简析annotation 赋值httpmethod等属性
}
创建了一个CallAdapter和一个Converter.
CallAdapter
以ExecutorCallAdapterFactory为例:
ExecutorCallAdapterFactory的get方法用来生产CallAdapter。
CallAdapter的描述:Adapts a {@link Call} into the type of {@code T}. 把Call适配成T。
<R> T adapt(Call<R> call);
Converter
以BuiltInConverters为例:
转换器,转换成相应的RequestBody或者相应的ResponseBody。