rxjava学习笔记(二)

关于合并被观察者

问题描述:两个被观察者同时执行两个请求网络操作,其中一个在执行过程中发生异常,此时并不希望中断另一个的执行,而是让它执行完。

可以利用操作符mergeDelayError

但是还有一点需要注意:
observeOn(AndroidSchedulers.mainThread(),true)
这儿必须执行两个参数的重载方法,而且必须传true
github上有关于这个的描述 参考
代码演示:

Observable obs1=Observable.create(new Observable.OnSubscribe(){

            @Override
            public void call(Subscriber 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(){

            @Override
            public void call(Subscriber 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() {
                    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");
                    }
                });

你可能感兴趣的:(rxjava学习笔记(二))