本文将通过Retrofit 使用三种方式实现网络请求操作。
项目地址在本文末尾 :)
1、注册网络权限。
<uses-permission android:name="android.permission.INTERNET"/>
2、添加依赖
本例使用gson 解析网络请求返回的数据;关于rx 库后续文章会继续介绍。
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'io.reactivex:rxandroid:1.2.1'
compile 'io.reactivex:rxjava:1.2.3'
3、设置服务器地址
public static final String API_URL = "https://api.github.com";
4、创建model 实体
public static class Contributor {
public final String login;
public final int contributions;
public Contributor(String login, int contributions) {
this.login = login;
this.contributions = contributions;
}
}
5、创建Retrofit 请求实例
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(API_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
6、要请求的接口
public interface GitHubService {
@GET("/repos/{owner}/{repo}/contributors")
Call<List<Contributor>> contributors(
@Path("owner") String owner,
@Path("repo") String repo);
@GET("/repos/{owner}/{repo}/contributors")
Observable<List<Contributor>> observableContributors(
@Path("owner") String owner,
@Path("repo") String repo);
}
方式一
final Call<List<Contributor>> call = github.contributors("googlesamples", "android-architecture");
new Thread(new Runnable() {
@Override
public void run() {
try {
contributors = call.execute().body();
// 获取到结果数据
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
方式二
final Call<List<Contributor>> call = github.contributors("googlesamples", "android-architecture");
call.enqueue(new Callback<List<Contributor>>() {
@Override
public void onResponse(Call<List<Contributor>> call, Response<List<Contributor>> response) {
if (response != null) {
contributors = response.body();
// 获取到结果数据
}
}
@Override
public void onFailure(Call<List<Contributor>> call, Throwable t) {
}
});
方式三
github.observableContributors("googlesamples", "android-architecture")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<List<Contributor>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<Contributor> contributors) {
// 获取到结果数据
}
});