Android Rxjava2基本应用


1 首先认识几个对象
Observable 可观察者
Observer 观察者
Disposable 容器,使用后即可抛弃的东西
Flowable (可观察者) rxjava2 新增的
FlowableProcessor (Flowable的子类),增加了toSerialized 的方法,和一些get

2 对象之间的关系
关系:
Observable: 可以通过Observable create 来创建
Observer: 直接new

Disposable dispose = obervable.subscribe(observer); 被观察者在订阅以后,得到容器
Disposable 容器可以直接销毁
dispose.dispose();,来取消订阅
Flowable<String> fl = PublishProcessor.create().ofType(String.class);
Disposable disposable = fl.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {

}
});

3 示例
1 new被观察者: 一个可观察的事物, 比如一个正在进行的计算
Observable ober = Observable.create(new ObservableOnSubscribe() {
@Override
public void subscribe(ObservableEmitter e) throws Exception {
//观察某一个事情
for(int i =0; i<5; i++){
e.onNext(i);
}
e.onComplete();
}
});
2 new观察者: 设置回调
Observer observer = new Observer() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Object o) {
//get 0 ~5
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
};
3 建立订阅关系
ober.subscribe(observer);
以上就是最基础的用法

基本的对象:被观察者 Observable 与 观察者 Observer
比如 rxjava2+retroifit2
定义的请求接口:
@POST("/api/services/getAreas")
Observable<HttpResult<AreaListOutput>> queryAllArea(@Body AreaInput input);
这个就是被观察者
Observable<HttpResult<AreaListOutput>> deviceObservable = RetrofitHelper.tokenCreate(CloudService.class).queryAllArea(input);
deviceObservable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.compose(this.bindToLifecycle()); //RxLiferecycle 继承RxActivity/RxFragment
.subscribe(new Observer<HttpResult<AreaListOutput>>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(HttpResult<AreaListOutput> areaListOutputHttpResult) {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
帮助类
public class RetrofitHelper {
public static <T> T tokenCreate(final Class<T> service) {
return new Retrofit.Builder()
.client(OkHttpUtils.getInstance().getOkHttpClient())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(NetConstant.IPAFRESS).build().create(service);
}
}

//这个就是网络调用最基本的用法
在onNext 中获取数据

2 subscribe时,也可以只关心其中某一些方法,使用Consumer
Consumer<Object> conNext = new Consumer<Object>() {
@Override
public void accept(Object bean) throws Exception {
//same to onNext
}
};
Consumer<Throwable> conError = new Consumer<Throwable>() {
@Override
public void accept(Throwable bean) throws Exception {
//same to onError
}
};
Action confinish = new Action() {
@Override
public void run() throws Exception {
//onComplete
}
};
ober.subscribe(conNext);
//ober.subscribe(conNext, conError);
ober.subscribe(conNext, conError, confinish);
3 Observable 有一些回调可以单独使用,doOnDispose() 等

4 进阶
或使用Rxjava2 的Flowable
//新增 Flowable 专门处理背压问题(生产者 大于消费者)
Flowable.create(new FlowableOnSubscribe<Object>() {
@Override
public void subscribe(@NonNull FlowableEmitter<Object> e) throws Exception {
}
}, BackpressureStrategy.ERROR) //背压策略
.subscribe(new FlowableSubscriber<Object>() {
@Override
public void onSubscribe(@NonNull Subscription s) {
}
@Override
public void onNext(Object o) {
}

@Override
public void onError(Throwable t) {
}
@Override
public void onComplete() {
}
});

猜你喜欢

转载自blog.csdn.net/qq_42022061/article/details/80762788