一、简介:
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之类的了
}
});