Rxjava学习
基本用法
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<Integer> observer = new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG,"onSubscribe");
}
@Override
public void onNext(Integer value) {
Log.d(TAG,""+value);
}
@Override
public void onError(Throwable e) {
Log.d(TAG,"onError");
}
@Override
public void onComplete() {
Log.d(TAG,"onComplete");
}
};
observable.subscribe(observer);
//运行结果
03-13 13:59:33.957 4183-4183/com.example.uds.recyclerviewtest D/MAP: onSubscribe
03-13 13:59:33.958 4183-4183/com.example.uds.recyclerviewtest D/MAP: 1
03-13 13:59:33.958 4183-4183/com.example.uds.recyclerviewtest D/MAP: 2
03-13 13:59:33.958 4183-4183/com.example.uds.recyclerviewtest D/MAP: 3
03-13 13:59:33.958 4183-4183/com.example.uds.recyclerviewtest D/MAP: onComplete
使用链式调用
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();
}
}).subscrib(new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG,"onSubscribe");
}
@Override
public void onNext(Integer value) {
Log.d(TAG,""+value);
}
@Override
public void onError(Throwable e) {
Log.d(TAG,"onError");
}
@Override
public void onComplete() {
Log.d(TAG,"onComplete");
}
});
比较关键的两个对象:ObservableEmitter 和 Disposable
ObservableEmitter 的意思是发射器的意思,就是用来发送事件的
onNext(T value) 可以发送多次
onComplete() 发送一次后可以接着发送 onNext 但是不再被接收到
onError(Throwable error) 只可以发送一次,可以接着发送 onNext 但是不再被接受到
Disposable 的意思是一次性,用完即丢的意思,调用dispose() 方法会切断上游和下游之间的通信
虽然是切断但是上游依然可以继续发送剩余的事件,下游不再接收而已
Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> e) throws Exception {
Log.d(TAG,"emit 1");
e.onNext(1);
Log.d(TAG,"emit 2");
e.onNext(2);
Log.d(TAG,"emit 3");
e.onNext(3);
e.onComplete();
}
}).subscribe(new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG,"onSubscribe");
mDisposable = d;
}
@Override
public void onNext(Integer value) {
Log.d(TAG,"onNext "+value);
if(value == 2){
Log.d(TAG,"disposable");
mDisposable.dispose();
Log.d(TAG,"isDisposed:" + mDisposable.isDisposed());
}
}
@Override
public void onError(Throwable e) {
Log.d(TAG,"onError");
}
@Override
public void onComplete() {
Log.d(TAG,"onComplete");
}
});
//结果
03-13 14:46:02.647 13356-13356/com.example.uds.recyclerviewtest D/MAP: onSubscribe
03-13 14:46:02.647 13356-13356/com.example.uds.recyclerviewtest D/MAP: emit 1
03-13 14:46:02.647 13356-13356/com.example.uds.recyclerviewtest D/MAP: onNext 1
03-13 14:46:02.647 13356-13356/com.example.uds.recyclerviewtest D/MAP: emit 2
03-13 14:46:02.647 13356-13356/com.example.uds.recyclerviewtest D/MAP: onNext 2
03-13 14:46:02.647 13356-13356/com.example.uds.recyclerviewtest D/MAP: disposable
03-13 14:46:02.647 13356-13356/com.example.uds.recyclerviewtest D/MAP: isDisposedtrue
03-13 14:46:02.647 13356-13356/com.example.uds.recyclerviewtest D/MAP: emit 3
subscribe() 的重载方法介绍
public final Disposable subscribe() {}
public final Disposable subscribe(Consumer<? super T> onNext) {}
public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError) {}
public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Action onComplete) {}
public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Action onComplete, Consumer<? super Disposable> onSubscribe) {}
public final void subscribe(Observer<? super T> observer) {}
Consumer 只关心onNext事件
Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
Log.d(TAG, "emit 1");
emitter.onNext(1);
Log.d(TAG, "emit 2");
emitter.onNext(2);
Log.d(TAG, "emit 3");
emitter.onNext(3);
Log.d(TAG, "emit complete");
emitter.onComplete();
Log.d(TAG, "emit 4");
emitter.onNext(4);
}
}).subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
Log.d(TAG, "onNext: " + integer);
}
});