0%

Retrofit初探

Retrofit简介

Retrofit是一个类型安全的REST网络请求库(A type-safe HTTP client for Android and Java)。作者是大名鼎鼎的Square,已开源到github。这个库为网络认证、API请求以及用OkHttp发送网络请求提供了强大的框架 。Retrofit直接支持RxJava,使得这个库被更多人去尝试。

使用

添加依赖

首先下载jar或者添加Gradle:

1
compile 'com.squareup.retrofit2:retrofit:2.0.2'

初始化 - Retrofit 类型

现在,让我们来看一下Retrofit的类型是如何替代REST adapter类型的,以及如何初始化。下面是一个请求GitHub Api的例子:
1.创建Retrofit对象

1
2
3
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com")
.build();

原来的方法叫做endpoint, 现在是baseUrl, baseUrl就是你所请求的Server的URL。

2.声明请求接口

1
2
3
4
5
6
7
interface GitHubService {
@GET("/repos/{owner}/{repo}/contributors")
Call<List<Contributor>> repoContributors(
@Path("owner") String owner,
@Path("repo") String repo);
}
GitHubService gitHubService = retrofit.create(GitHubService.class);

当我们调用repoContributors这个方法的时候,Retrofit会创建这个URL。如果我们传入Square和Retrofit字符串,分别作为owner和repo参数。我们就会得到这个URL:https://api.github.com/repos/square/retrofit/contributors

3.发送请求
Retrofit也支持同步和异步请求。分别调用execute()和enqueue()即可。

1
2
Call<Repo> call = service.loadRepo();
Repo repo = call.execute();

1
2
3
4
5
6
7
8
9
call.enqueue(new Callback<Repo>() {
@Override
public void onResponse(Response<Repo> response) {
// Get result Repo from response.body()
}
@Override
public void onFailure(Throwable t) {
}
});

由于现在Retrofit开始依赖 OkHttp,并没有Http Client层的抽象。现在是可以传递一个配置好的OkHttp实例的。比如:配置interceptors, 或者一个SSL socket工厂类,或者timeouts的具体数值。(OkHttp有默认的超时机制,如果你不需要自定义,实际上不必进行任何设置,但是如果你想要去设置它们,下面是一个例子告诉你来怎么操作。)

1
2
3
4
5
6
7
OkHttpClient client = new OkHttpClient();
client.interceptors().add(..);

Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com")
.client(client)
.build();

如果你要指明特定的 converter 或者 execute 机制,也是在这个时候加的。比如这会儿:我们可以给 GSON 设置一个或者多个 converter。也可以给 protocol buffer 设置一个 converter。

1
2
3
4
5
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com")
.addConverterFactory(ProtoConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();

如果你想要使用 RxJava 来代替 call, 你需要一个 Call Adapter Factory:

1
2
3
4
5
6
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com")
.addConverterFactory(ProtoConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();

不要忘了添加依赖:

1
2
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta3'
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta3'

参考

Retrofit官网

用 Retrofit 2 简化 HTTP 请求

赞赏是最好的支持