RxJava 是一个 基于事件流、实现异步操作的库
本文是基于Rxjava2.0, 2.0和1.0差异可以参考:
//www.greatytc.com/p/5588a6e2cbb0
添加依赖
compile 'io.reactivex.rxjava2:rxjava:2.0.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
具体实现
Observable.create(new ObservableOnSubscribe<Object>() {
@Override
public void subscribe(ObservableEmitter<Object> emitter) throws Exception {
emitter.onNext(null);
emitter.onComplete();
// emitter.onError(null);
}
}).subscribe(new Observer<Object>() {
// 1. 定义Disposable类变量
private Disposable mDisposable;
@Override
public void onSubscribe(Disposable d) {
// 默认最先调用复写的 onSubscribe()
mDisposable = d;
}
@Override
public void onNext(Object o) {
mDisposable.dispose(); //切断观察者和被观察者的连接
Log.d(TAG, "对Next事件"+ value +"作出响应" );
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "对Error事件作出响应");
}
@Override
public void onComplete() {
Log.d(TAG, "对Complete事件作出响应");
}
});
代码中有四个回调方法,但是我们不一定会用到所有的回调方法,那么怎么才能让代码更加简洁呢?
public final Disposable subscribe() {}
// 表示观察者不对被观察者发送的事件作出任何响应(但被观察者还是可以继续发送事件)
public final Disposable subscribe(Consumer<? super T> onNext) {}
// 表示观察者只对被观察者发送的Next事件作出响应
public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError) {}
// 表示观察者只对被观察者发送的Next事件 & Error事件作出响应
public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Action onComplete) {}
// 表示观察者只对被观察者发送的Next事件、Error事件 & Complete事件作出响应
public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Action onComplete, Consumer<? super Disposable> onSubscribe) {}
// 表示观察者只对被观察者发送的Next事件、Error事件 、Complete事件 & onSubscribe事件作出响应
public final void subscribe(Observer<? super T> observer) {}
// 表示观察者对被观察者发送的任何事件都作出响应
被观察者 Observable的subscribe()具备多个重载的方法
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter emitter) throws Exception {
emitter.onNext("null");
}
}).subscribe(new Consumer<String>() {
@Override
public void accept(String o) throws Exception {
LogUtils.e("TAG", o); //当被观察者发射onNext时,accept将被执行
}
});