Retrofit+RxJava+RxAndroid+Gson快速构建网络框架

1.首先build.gradle文件中引用依赖库

1
2
3
4
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.3.0'
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'io.reactivex:rxandroid:1.2.1'

2.通过Builder模式创建Retrofit对象

1
2
3
4
5
6
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com")
//通过Gson 解析实体
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();

3.定义或者通过GsonFormat插件把Json字符串生成实体类(本例中的实体类Repo)

4.定义接口

1
2
3
4
5
6
7
/**
* 定义接口
*/
public interface GitHubService {
@GET("users/{user}/repos")
Observable<List<Repo>> listRepos(@Path("user") String user);
}

5.创建接口实例,调用接口并通过观察者模式获取数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
GitHubService service = retrofit.create(GitHubService.class);
service.listRepos("dz-hexiang") //在IO线程进行网络请求
.subscribeOn(Schedulers.newThread())//请求在新的线程中执行
.observeOn(AndroidSchedulers.mainThread()) //请求完成后在主线程线程中执行,如更新ui
.doOnNext(new Action1<List<Repo>>() {
@Override
public void call(List<Repo> repos) {
Log.w("retrofit","获取到的数据");
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<List<Repo>>() {
@Override
public void onCompleted() {
Log.w("retrofit","onCompleted");
}

@Override
public void onError(Throwable e) {
Log.w("retrofit","onError");
}

@Override
public void onNext(List<Repo> repos) {
/**
* 主线程中把得到的数据更新UI界面
*/
// mTextMessage.setText(new Gson().toJson(repos));
}
});