关于合并被观察者
问题描述:两个被观察者同时执行两个请求网络操作,其中一个在执行过程中发生异常,此时并不希望中断另一个的执行,而是让它执行完。
可以利用操作符mergeDelayError
但是还有一点需要注意:
observeOn(AndroidSchedulers.mainThread(),true)
这儿必须执行两个参数的重载方法,而且必须传true
github上有关于这个的描述 参考
代码演示:
Observable obs1=Observable.create(new Observable.OnSubscribe<String>(){
@Override
public void call(Subscriber<? super String> subscriber) {
try {
Thread.sleep(500);
subscriber.onNext(" aaa");
subscriber.onCompleted();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).subscribeOn(Schedulers.newThread());
Observable obs2=Observable.create(new Observable.OnSubscribe<String>(){
@Override
public void call(Subscriber<? super String> subscriber) {
try {
Thread.sleep(1500);
subscriber.onNext("bbb");
subscriber.onCompleted();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).subscribeOn(Schedulers.newThread());
Observable.mergeDelayError(obs1,obs2)
.observeOn(AndroidSchedulers.mainThread(),true)
.subscribe(new Subscriber<String>() {
StringBuffer sb=new StringBuffer();
@Override
public void onCompleted() {
mText.append("两个任务都处理完毕!!\n");
mText.append("更新数据:"+sb+"\n");
}
@Override
public void onError(Throwable e) {
Log.e("abc",e.toString());
}
@Override
public void onNext(String s) {
sb.append( s+",");
mText.append("得到一个数据:"+s+"\n");
}
});