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
3Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com")
.build();
原来的方法叫做endpoint, 现在是baseUrl, baseUrl就是你所请求的Server的URL。
2.声明请求接口1
2
3
4
5
6
7interface GitHubService {
"/repos/{owner}/{repo}/contributors") (
Call<List<Contributor>> repoContributors(
"owner") String owner, (
"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
2Call<Repo> call = service.loadRepo();
Repo repo = call.execute();
1 | call.enqueue(new Callback<Repo>() { |
由于现在Retrofit开始依赖 OkHttp,并没有Http Client层的抽象。现在是可以传递一个配置好的OkHttp实例的。比如:配置interceptors, 或者一个SSL socket工厂类,或者timeouts的具体数值。(OkHttp有默认的超时机制,如果你不需要自定义,实际上不必进行任何设置,但是如果你想要去设置它们,下面是一个例子告诉你来怎么操作。)1
2
3
4
5
6
7OkHttpClient 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
5Retrofit 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
6Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com")
.addConverterFactory(ProtoConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
不要忘了添加依赖:1
2compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta3'
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta3'