一、簡介:
RxAndroid+Retrofit已經成了當前進行訪問網絡數據的標配了,今天就來講講在項目中這種組合拳的使用姿勢
*1、RxJava和Retrofit結合的時候,首先在gradle中添加如下配置,先把我的gradle文件拿出來給大家瞧瞧:8
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'io.reactivex:rxjava:1.2.6'
compile 'io.reactivex:rxandroid:1.2.1'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
2、Retrofit的接口中的定義如下:
public interface RetrofitInterface {
//獲取“首頁商家店鋪”的數據
@GET(mallseller/getMallForUser.htm)
Observable<MallDataBean> getMallDataBean(@QueryMap Map<String, Object> params);
}
3、創建APIService的實例,代碼如下:
private static Retrofit retrofit;
private static RetrofitInterface retrofitInterface;
private static void initRetrofit(String baseUrl){
retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
//創建Retrofit接口對象
retrofitInterface = retrofit.create(RetrofitInterface.class);
}
注意,這里和我們在一般場景下使用Retrofit有一個區別,那就是多了addCallAdapterFactory這個方法,這里我們添加的RxJava的適配工廠。
4、然后我們就可以調用RetrofitInterface 中的方法來訪問網絡數據了,如下:
Observable observable = retrofitInterface.getMallDataBean(params);
//在子線程訪問數據
observable .subscribeOn(Schedulers.io())
//在主線程顯示數據
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<ClassfyBean>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable throwable) {
}
@Override
public void onNext(MallDataBean mallDataBean) {
//你獲取到的數據進行處理,而且這已經是在主線程中了哦,不用什么Handler之類的了
}
});