更多文章請點擊:http://77blogs.com/?p=170 轉載請標明出處:https://www.cnblogs.com/tangZH/p/12088332.html,http://77blogs.com/?p=170 使用場景一: 現在要執行兩個任務: 1、輸出字元串0 2、輸出字元串1 ...
更多文章請點擊:http://77blogs.com/?p=170
轉載請標明出處:https://www.cnblogs.com/tangZH/p/12088332.html,http://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操作符:按照順序依次遍歷被觀察者中事件,事件不為空,則停止遍歷。