关闭

retrofit学习(一)-----主要类的学习

标签: retrofit
94人阅读 评论(0) 收藏 举报
分类:

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。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:716次
    • 积分:103
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档