您的位置:首页 > 编程语言 > Java开发

Retrofit2+RxJava

2016-08-28 22:30 99 查看

Retrofit2+RxJava

1.定义接口

Observable

interface city {
@GET("openapi/cities")
Observable<City> getCitiesBean();
}


2.Subscriber

Func1 和 Action 的区别在于, Func1 包装的是有返回值的方法。另外,和 ActionX 一样, FuncX 也有多个,用于不同参数个数的方法。FuncX 和 ActionX 的区别在 FuncX 包装的是有返回值的方法。

city.getCitiesBean()
.subscribeOn(Schedulers.io())//指定网络加载等操作在I/0线程
.observeOn(AndroidSchedulers.mainThread())//更新页面在主线程,符合业务逻辑
.map(new Func1<City, List<City.CitiesBean>>() {

@Override
public List<City.CitiesBean> call(City city) {
return city.getCities();
}
})//Func1是一个带返回值的包装,map是对Observable进行转换
.flatMap(new Func1<List<City.CitiesBean>, Observable<String>>() {
@Override
public Observable<String> call(List<City.CitiesBean> citiesBeen) {
return Observable.just(citiesBeen.get(1).getCity_name());
}//subscribe是订阅,其中Action1是一个封装了OnNext的
}).subscribe(new Action1<String>() {
//flatMap也是一种转换,是对多个对象进行转换,返回的必须是一个Observable,然后再进行订阅,接受到的新的
//订阅再进行subscribe订阅,然后操作的是这个新的Observable。相当于A->C变成A->B,B->C这样铺平。也就是
//flat的含义。
@Override
public void call(String s) {
Log.v("aaaaaaaaa",s);
}
});


标准应该是subscribe,(new Observer)这样可以得到completed也就是发送完毕的,OnNext执行的操作,以及ERROR报错。Action1是带一个参数,OnNext()的包装。

new Observer<String>() {
@Override
public void onCompleted() {

}

@Override
public void onError(Throwable e) {

}

@Override
public void onNext(String s) {

}
}


3.取消订阅,Subscriber.unsubcribe();

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: