RxJava 是一個(gè) 基于事件流、實(shí)現(xiàn)異步操作的庫(kù)
本文是基于Rxjava2.0, 2.0和1.0差異可以參考:
http://www.lxweimin.com/p/5588a6e2cbb0
添加依賴
compile 'io.reactivex.rxjava2:rxjava:2.0.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
具體實(shí)現(xiàn)
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) {
// 默認(rèn)最先調(diào)用復(fù)寫的 onSubscribe()
mDisposable = d;
}
@Override
public void onNext(Object o) {
mDisposable.dispose(); //切斷觀察者和被觀察者的連接
Log.d(TAG, "對(duì)Next事件"+ value +"作出響應(yīng)" );
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "對(duì)Error事件作出響應(yīng)");
}
@Override
public void onComplete() {
Log.d(TAG, "對(duì)Complete事件作出響應(yīng)");
}
});
image.png
代碼中有四個(gè)回調(diào)方法,但是我們不一定會(huì)用到所有的回調(diào)方法,那么怎么才能讓代碼更加簡(jiǎn)潔呢?
public final Disposable subscribe() {}
// 表示觀察者不對(duì)被觀察者發(fā)送的事件作出任何響應(yīng)(但被觀察者還是可以繼續(xù)發(fā)送事件)
public final Disposable subscribe(Consumer<? super T> onNext) {}
// 表示觀察者只對(duì)被觀察者發(fā)送的Next事件作出響應(yīng)
public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError) {}
// 表示觀察者只對(duì)被觀察者發(fā)送的Next事件 & Error事件作出響應(yīng)
public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Action onComplete) {}
// 表示觀察者只對(duì)被觀察者發(fā)送的Next事件、Error事件 & Complete事件作出響應(yīng)
public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Action onComplete, Consumer<? super Disposable> onSubscribe) {}
// 表示觀察者只對(duì)被觀察者發(fā)送的Next事件、Error事件 、Complete事件 & onSubscribe事件作出響應(yīng)
public final void subscribe(Observer<? super T> observer) {}
// 表示觀察者對(duì)被觀察者發(fā)送的任何事件都作出響應(yīng)
被觀察者 Observable的subscribe()具備多個(gè)重載的方法
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); //當(dāng)被觀察者發(fā)射onNext時(shí),accept將被執(zhí)行
}
});