RxJava的concat操作符


更多文章請點擊http://77blogs.com/?p=170

轉載請標明出處:https://www.cnblogs.com/tangZH/p/12088332.htmlhttp://77blogs.com/?p=170

 

使用場景一:

現在要執行兩個任務:

1、輸出字符串0

2、輸出字符串1

我們就可以使用concat來實現多個數據源。

1、輸出字符串0的數據源:

        Observable observableLocal = Observable.create(new ObservableOnSubscribe() { @Override public void subscribe(ObservableEmitter emitter) throws Exception { emitter.onNext("0"); emitter.onComplete(); } }).subscribeOn(Schedulers.io());

2、輸出字符串1的數據源:

        Observable observableNet = Observable.create(new ObservableOnSubscribe() { @Override public void subscribe(ObservableEmitter emitter) throws Exception { emitter.onNext("1"); emitter.onComplete(); } }).subscribeOn(Schedulers.io());

3、接收多個數據源:

 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

兩個字符串都輸出了,而且是有序的。

 

使用場景二、

獲取數據,如果從本地緩存中獲取得到數據,那么便不從網絡獲取,否則從網絡獲取。

我們將上面的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操作符:按照順序依次遍歷被觀察者中事件,事件不為空,則停止遍歷。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM