更多文章請點擊:http://77blogs.com/?p=170html
轉載請標明出處:http://www.javashuo.com/article/p-vniaqhvu-dh.html,http://77blogs.com/?p=170java
使用場景一:緩存
如今要執行兩個任務:網絡
一、輸出字符串0ide
二、輸出字符串1spa
咱們就能夠使用concat來實現多個數據源。code
一、輸出字符串0的數據源:htm
Observable observableLocal = Observable.create(new ObservableOnSubscribe() { @Override public void subscribe(ObservableEmitter emitter) throws Exception { emitter.onNext("0"); emitter.onComplete(); } }).subscribeOn(Schedulers.io());
二、輸出字符串1的數據源:blog
Observable observableNet = Observable.create(new ObservableOnSubscribe() { @Override public void subscribe(ObservableEmitter emitter) throws Exception { emitter.onNext("1"); emitter.onComplete(); } }).subscribeOn(Schedulers.io());
三、接收多個數據源:事件
Observable.concat(observableLocal, observableNet) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer() { @Override public void accept(Object o) throws Exception { Log.d(TAG, (String) o); } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { Log.d(TAG, throwable.getMessage()); } }); }
能夠看到Log:
12-23 20:23:48.771 23643-23643/com.status.rxjavasample D/RxJavaHelper: 0
12-23 20:23:48.771 23643-23643/com.status.rxjavasample D/RxJavaHelper: 1
兩個字符串都輸出了,並且是有序的。
使用場景2、
獲取數據,若是從本地緩存中獲取獲得數據,那麼便不從網絡獲取,不然從網絡獲取。
咱們將上面的1,2兩個步驟分別當成從本地緩存獲取數據和從網絡緩存中獲取數據,那麼咱們須要改變上面的3步驟。
Observable.concat(observableLocal, observableNet) .firstElement() .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer() { @Override public void accept(Object o) throws Exception { Log.d(TAG, (String) o); } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { Log.d(TAG, throwable.getMessage()); } }); }
惟一不一樣的是加上.firstElement()。
輸出的log爲:
12-23 20:29:11.731 24458-24458/com.status.rxjavasample D/RxJavaHelper: 0
firstElement操做符:按照順序依次遍歷被觀察者中事件,事件不爲空,則中止遍歷。