Android Rxjava2基本应用

本文介绍RxJava2的基础概念与使用方法,包括Observable、Observer和Disposable等核心对象的作用及相互关系,并通过示例展示如何实现网络请求。同时,文章深入探讨了RxJava2中Flowable的特性和背压处理策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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() {
}
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ai小成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值