本文是基于Retrofit2進(jìn)行學(xué)習(xí)襟雷。首先你要知道Retrofit是一個(gè)網(wǎng)絡(luò)請求框架阱表,它的api 定義可以查閱官網(wǎng).
從零開始搭建一個(gè)Retrofit的例子
以下示例會(huì)分別列出Retrofit 1.9
和Retrofit 2
的區(qū)別用法
添加依賴
Retrofit 1.9
dependencies {
// Retrofit & OkHttp
compile 'com.squareup.retrofit:retrofit:1.9.0'
compile 'com.squareup.okhttp:okhttp:2.2.0'
}
Retrofit 2
dependencies {
// Retrofit & OkHttp
compile 'com.squareup.retrofit:retrofit:2.0.0-beta2'
}
Api服務(wù)核心類
ServiceGenerator是項(xiàng)目的http核心類蚯斯,專門用于封裝http請求的基類箫攀。
Retrofit 1.9
public class ServiceGenerator {
public static final String API_BASE_URL = "http://your.api-base.url";
private static RestAdapter.Builder builder = new RestAdapter.Builder()
.setEndpoint(API_BASE_URL)
.setClient(new OkClient(new OkHttpClient()));
public static <S> S createService(Class<S> serviceClass) {
RestAdapter adapter = builder.build();
return adapter.create(serviceClass);
}
}
Retrofit 2
public class ServiceGenerator {
public static final String API_BASE_URL = "http://api.github.com";
private static OkHttpClient httpClient = new OkHttpClient();
private static Retrofit.Builder builder =
new Retrofit.Builder()
.baseUrl(API_BASE_URL)
.addConverterFactory(GsonConverterFactory.create());
public static <S> S createService(Class<S> serviceClass) {
Retrofit retrofit = builder.client(httpClient).build();
return retrofit.create(serviceClass);
}
}
Json解析
Retrofit 1.9默認(rèn)帶有Gson的支持抑月。Retorfit2就需要自定義添加支持。
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'
Api調(diào)用范例
這里我會(huì)以github的API為例裕偿。
聲明GitHubClient類
Retrofit 1.9
public interface GitHubClient {
@GET("/repos/{owner}/{repo}/contributors")
List<Contributor> contributors(
@Path("owner") String owner,
@Path("repo") String repo
);
}
Retrofit 2
public interface GitHubClient {
@GET("/repos/{owner}/{repo}/contributors")
Call<List<Contributor>> contributors(
@Path("owner") String owner,
@Path("repo") String repo
);
}
Model類
class Contributor {
String login;
int contributions;
}
請求
Retrofit 1.9
GitHubClient client = ServiceGenerator.createService(GitHubClient.class);
// Fetch and print a list of the contributors to this library.
List<Contributor> contributors =
client.contributors("fs_opensource", "android-boilerplate");
for (Contributor contributor : contributors) {
System.out.println(
contributor.login + " (" + contributor.contributions + ")");
}
Retrofit 2
GitHubClient client = ServiceGenerator.createService(GitHubClient.class);
// Fetch and print a list of the contributors to this library.
Call<List<Contributor>> call =
client.contributors("lzyzsd", "Awesome-RxJava");
List<Contributor> contributors = null;
try {
contributors = call.execute().body();
for (Contributor contributor : contributors) {
System.out.println(
contributor.login + " (" + contributor.contributions + ")");
}
} catch (IOException e) {
e.printStackTrace();
}