在 gradle (Module) 层级的 dependencies 中内加入:
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
implementation 'io.reactivex.rxjava3:rxjava:3.0.0'
Observable(被观察者)/Observer(观察者)
在RxJava中,有发送资料流程然後终止资料流程的Observable物件,以及订阅Observable的Observer物件。 Observer订阅的Observable发送值、错误、或完成信号後,Observer会接收到通知。
流程:
private void myObservable() {
Observable mObservable = new Observable() {
@Override
protected void subscribeActual(@NonNull Observer observer) {
observer.onNext("hello world");
observer.onComplete();
}
};
Observer mObserver = new Observer() {
// 这是新加入的方法,在订阅後发送数据之前,会首先调用
// Disposable可用於取消订阅
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onNext(@NonNull Object o) {
Log.e("onNext", String.valueOf(o));
}
@Override
public void onError(@NonNull Throwable e) {
}
@Override
public void onComplete() {
}
};
mObservable.subscribe(mObserver);
}
Flowable(被观察者)/Subscriber(观察者)
上游的被观察者会响应下游观察者的资料请求,下游调用request()告诉上游发送多少个资料。避免大量资料堆积在调用链上,使内存一直处於较低水平。
private void myFlowable() {
Flowable.range(0,5).subscribe(new Subscriber<Integer>() {
Subscription subscription;
// 订阅後会先调用,相当於onStart()
// Subscription可用於请求数据、取消订阅
@Override
public void onSubscribe(Subscription s) {
Log.w("flow","onSubscribe start");
subscription = s;
subscription.request(1);
}
@Override
public void onNext(Integer integer) {
Log.w("flow","onNext-->"+integer);
subscription.request(1);
}
@Override
public void onError(Throwable t) {
t.printStackTrace();
}
@Override
public void onComplete() {
Log.w("flow","onComplete");
}
});
}
Single/SingleObserver
Single类似於Observable,不同的是,它总是只发送一个值,或者一个错误通知,而不是发送一系列的值,所以当你使用一个单一连续事件流,这样你可以使用Single。Single观察者只包含两个事件,一个是正常处理成功的onSuccess,另一个是处理失败的onError。因此,不同於Observable需要三个方法onNext,onError,onCompleted,订阅Single只需要两个方法:
private void mySingle() {
// 被观察者
Single<String> single = new Single<String>() {
@Override
protected void subscribeActual(@NonNull SingleObserver<? super String> observer) {
observer.onSuccess("success");
}
};
// 订阅观察者SingleObserver
single.subscribe(new SingleObserver<String>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onSuccess(@NonNull String s) {
Log.d("onSuccess", s);
}
@Override
public void onError(@NonNull Throwable e) {
}
});
}
Completable/CompletableObserver
如果你的观察者连onNext事件都不关心,可以使用Completable,因为Completable只有onComplete和onError两个事件
private void myCompletable() {
Completable.create(new CompletableOnSubscribe() {
@Override
public void subscribe(@NonNull CompletableEmitter emitter) throws Throwable {
emitter.onComplete();
}
}).subscribe(new CompletableObserver() {
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onComplete() {
Log.e("onComplete","onComplete");
}
@Override
public void onError(@NonNull Throwable e) {
}
});
}
Maybe/MaybeObserver
如果你有一个需求是可能发送一个资料或者不会发送任何资料,这时候你就需要Maybe,它类似於Single和Completable的混合体。
Maybe可能会调用以下其中一种情况:
private void myMaybe() {
Maybe<String> maybe = Maybe.create(new MaybeOnSubscribe<String>() {
@Override
public void subscribe(@NonNull MaybeEmitter<String> emitter) throws Throwable {
// 发送一个资料的情况或onError,不需再调用onComplete
emitter.onSuccess("hello");
// 不需要发送资料的情况或onError
// emitter.onComplete();
}
});
maybe.subscribe(new MaybeObserver<String>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onSuccess(@NonNull String s) {
Log.d("onSuccess", s);
}
@Override
public void onError(@NonNull Throwable e) {
}
@Override
public void onComplete() {
}
});
}
谢谢大家愿意花时间阅读,小弟弟我在此鞠躬
<<: 从 JavaScript 角度学 Python(29) - BeautifulSoup
前言 接下来就是安装 Python 的部分,毕竟我们要学习 Python 就要安装 Python 呀...
如果有错误,欢迎留言指教~ Q_Q 还没写完辣 What’s useRef? 在 React 里希...
接下来让我们开始来实际安装TiDB。 TiDB在4.0版本之後推出了Tiup这个安装工具。功能十分齐...
认识过网站的基础後,接下来可以多观察生活中的范例做练习,选择几个成效不错的网站去做比较与分析,以下整...
上传LINE提供的范例回声机器人 第一步:先至LINE提供的GITHUB位置下载其资料夹,此处我们用...