RxJava的簡單使用
1.初始化 Observable
2.初始化 Observer
3.建立訂閱關係
添加依賴
compile 'io.reactivex.rxjava2:rxjava:2.2.1'
compile 'io.reactivex.rxjava2:rxandroid:2.1.0'
代碼實現:
Observable.create(new ObservableOnSubscribe<Integer>() {
// 第一步:初始化Observable
//決定什麼時候觸發事件以及觸發怎樣的事件
@Override
public void subscribe(@NonNull ObservableEmitter<Integer> e) throws Exception {
Log.e(TAG, "Observable發射 1" + "\n");
e.onNext(1);
}
}).subscribe(new Observer<Integer>() {
// 第二步:初始化Observer,決定事件觸發的時候將有怎樣的行爲
// 第三步:訂閱,聯繫起來
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e(TAG, "調用onSubscribe"+"\n" );
}
@Override
public void onNext(@NonNull Integer integer) {
Log.e(TAG, "調用onNext : value : " + integer + "\n" );
}
@Override
public void onError(@NonNull Throwable e) {
Log.e(TAG, "調用onError : value : " + e.getMessage() + "\n" );
}
@Override
public void onComplete() {
Log.e(TAG, "調用onComplete" + "\n" );
}
});
- Observable 和 Observer 通過 subscribe() 方法實現訂閱關係,從而 Observable
可以在需要的時候發出事件來通知 Observer。
常見操作符
-
create
主要用於產生一個 Obserable 被觀察者對象。Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(@NonNull ObservableEmitter<Integer> e) throws Exception { Log.e(TAG, "Observable發射 1" + "\n"); e.onNext(1); e.onComplete(); Log.e(TAG, "Observable發射 2" + "\n"); e.onNext(2); Log.e(TAG, "Observable發射 3" + "\n"); e.onNext(3); Log.e(TAG, "Observable發射 4" + "\n" ); e.onNext(4); } }).subscribe(new Observer<Integer>() { private int i; private Disposable mDisposable; @Override public void onSubscribe(@NonNull Disposable d) { Log.e(TAG, "調用onSubscribe,是否調用 isDisposed :" + d.isDisposed() + "\n" ); mDisposable = d; } @Override public void onNext(@NonNull Integer integer) { Log.e(TAG, "調用onNext : value : " + integer + "\n" ); i++; if (i == 2) { // 在RxJava 2.x 中,新增的Disposable可以做到切斷的操作,讓Observer觀察者不再接收上游事件 mDisposable.dispose(); Log.e(TAG, "onNext : isDisposable切斷 : " + mDisposable.isDisposed() + "\n"); } } @Override public void onError(@NonNull Throwable e) { Log.e(TAG, "調用onError : value : " + e.getMessage() + "\n" ); } @Override public void onComplete() { Log.e(TAG, "調用onComplete" + "\n" ); } });
創建
Observable 時,回調的是 ObservableEmitter ,並且直接 throws Exception。其次,在創建的
Observer 中,也多了一個回調方法:onSubscribe,傳遞參數爲Disposable,Disposable 用於解除訂閱。 -
Just
在創建後就會發送這些對象,相當於執行了數次onNext()。Observable.just("1", "2", "3" , "4") .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<String>() { @Override public void accept(@NonNull String s) throws Exception { Log.e(TAG,"accept : onNext : " + s + "\n" ); } });
創建時傳入1、2、3、4, 快速創建被觀察者對象(Observable),最多隻能發送10個以下事件。 -
doOnNext
讓訂閱者在接收到數據之前可以自定義一些你想讓他做的事情。Observable.just(1, 2, 3, 4) .doOnNext(new Consumer<Integer>() { @Override public void accept(@NonNull Integer integer) throws Exception { Log.e(TAG, "doOnNext 哈哈哈"+integer); } }).subscribe(new Consumer<Integer>() { @Override public void accept(@NonNull Integer integer) throws Exception { Log.e(TAG, "doOnNext 嘿嘿嘿" + integer); } });
-
map
作用是對發送的每一個事件應用一個函數,讓每一個事件都按照指定的函數去變化 -
flatMap與 concatMap
這兩個操作符都可以把Observable 通過某種方法轉換爲多個 Observables,然後再把這些分散的 Observables裝進一個單一的 Observable中。區別在於,flatMap
並不能保證事件的順序,而 concatMap 可以。 -
distinct
去重 -
Filter
過濾器,可以接受一個參數,讓其過濾掉不符合我們條件的值。 -
from
將傳入的數組或 Iterable 拆分成具體對象後,依次發送出來。