添加依赖:
implementation 'io.reactivex.rxjava2:rxjava:2.0.1'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
我是按照水管系列来的,我把链接放出来水管系列,我不说细节,大神已经说得已经很细节了,我只是梳理一下操作符,供自己以后方便使用
简单用法
//上游
Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> e) throws Exception {
e.onNext(1);
e.onNext(2);
e.onNext(3);
e.onComplete();
}
});
//下游
Observer observer = new Observer() {
@Override
public void onSubscribe(Disposable d) {
showLog("subscribe");
}
@Override
public void onNext(Object value) {
showLog("" + value);
}
@Override
public void onError(Throwable e) {
showLog("" + e.toString());
}
@Override
public void onComplete() {
showLog("complete");
}
};
//建立连接
observable.subscribe(observer);
打印的Log:
01-15 12:52:17.317 1144-1144/com.xiey94.rxjava2 E/ccer: subscribe
01-15 12:52:17.317 1144-1144/com.xiey94.rxjava2 E/ccer: 1
01-15 12:52:17.317 1144-1144/com.xiey94.rxjava2 E/ccer: 2
01-15 12:52:17.317 1144-1144/com.xiey94.rxjava2 E/ccer: 3
01-15 12:52:17.317 1144-1144/com.xiey94.rxjava2 E/ccer: complete
链式写法
Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> e) throws Exception {
e.onNext(1);
e.onNext(2);
e.onNext(3);
e.onComplete();
}
}).subscribe(new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
showLog("subscribe");
}
@Override
public void onNext(Integer value) {
showLog("" + value);
}
@Override
public void onError(Throwable e) {
showLog("" + e.toString());
}
@Override
public void onComplete() {
showLog("complete");
}
});
打印的Log是一样的
Disposable新加的水管开关
Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> e) throws Exception {
showLog("emit1");
e.onNext(1);
showLog("emit2");
e.onNext(2);
showLog("emit3");
e.onNext(3);
showLog("complete");
e.onComplete();
}
}).subscribe(new Observer<Integer>() {
Disposable disposable;
private int i;
@Override
public void onSubscribe(Disposable d) {
showLog("subscribe");
disposable = d;
}
@Override
public void onNext(Integer value) {
showLog("" + value);
i++;
if (i == 2) {
disposable.dispose();
}
}
@Override
public void onError(Throwable e) {
showLog("" + e.toString());
}
@Override
public void onComplete() {
showLog("complete");
}
});
打印的Log:
01-15 13:12:06.521 1485-1485/? E/ccer: subscribe
01-15 13:12:06.521 1485-1485/? E/ccer: emit1
01-15 13:12:06.521 1485-1485/? E/ccer: 1
01-15 13:12:06.521 1485-1485/? E/ccer: emit2
01-15 13:12:06.521 1485-1485/? E/ccer: 2
01-15 13:12:06.521 1485-1485/? E/ccer: emit3
01-15 13:12:06.521 1485-1485/? E/ccer: complete
可见,切断水管后,上游还在发送事件,下游却已经收不到了;
只关心OnNext事件
Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> e) throws Exception {
showLog("emit1");
e.onNext(1);
showLog("emit2");
e.onNext(2);
showLog("emit3");
e.onNext(3);
showLog("complete");
e.onComplete();
showLog("emit4");
e.onNext(4);
}
}).subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
showLog("" + integer);
}
});
打印Log:
01-15 13:17:48.901 1577-1577/? E/ccer: emit1
01-15 13:17:48.901 1577-1577/? E/ccer: 1
01-15 13:17:48.901 1577-1577/? E/ccer: emit2
01-15 13:17:48.901 1577-1577/? E/ccer: 2
01-15 13:17:48.901 1577-1577/? E/ccer: emit3
01-15 13:17:48.901 1577-1577/? E/ccer: 3
01-15 13:17:48.901 1577-1577/? E/ccer: complete
01-15 13:17:48.901 1577-1577/? E/ccer: emit4