美文网首页Android开发
RxJava学习(三)concat和firstElement操作

RxJava学习(三)concat和firstElement操作

作者: 大虾啊啊啊 | 来源:发表于2018-04-04 10:41 被阅读0次

    concat操作符:串行合并多个观察者中的事件。
    firstElement操作符:按照顺序依次遍历被观察者中事件,事件不为空,则停止遍历。

    该例子为:我们平时开发中的数据缓存功能。
    1.首先获取内存缓存中的数据,如果数据为空,获取硬盘缓存中的数据。
    2.获取硬盘缓存中的数据,如果硬盘缓存中数据为空,则从网络中获取数据。
    3.获取网络中的数据。
    获取到数据之后发送事件。

    
    private String memoryData;//内存缓存的数据
        private String diskData = "缓存中的数据";//磁盘缓存的数据
        private String netWorkData="网络中的数据";//网络获取的数据
        /**
         * 分别依次遍历,如果前面的数据为空,则往后面获取数据
         * 即1.先获取内存缓存的数据,如果为空
         * 2.获取磁盘缓存中的数据,如果为空
         * 3.获取网络的数据
         */
        private void getData(){
            //三个数据源封装成了三个被观察者对象
            Observable<String> observable1 = Observable.create(new ObservableOnSubscribe<String>() {
                @Override
                public void subscribe(ObservableEmitter<String> e) throws Exception {
                    if(memoryData==null){
                        e.onComplete();
                    }
                    else{
                        e.onNext(memoryData);
                    }
                }
            });
            Observable<String>  observable2= Observable.create(new ObservableOnSubscribe<String>() {
                @Override
                public void subscribe(ObservableEmitter<String> e) throws Exception {
                    if(diskData==null){
                        e.onComplete();
                    }
                    else{
                        e.onNext(diskData);
                    }
                }
            });
            Observable<String>  observable3 = Observable.just(netWorkData);
            //对三个被观察者串行合并成一个队列
            Observable.concat(observable1,observable2,observable3)
                    .firstElement()//从串行队列依次按顺序遍历事件,取出数据,如果取到,则发送事件,停止遍历。
                    .subscribe(new Consumer<String>() {
                        @Override
                        public void accept(String o) throws Exception {
                            Log.e(TAG, "获取到的数据: "+ o);
                        }
                    });
        }
    
    

    输出结果:

    image.png

    相关文章

      网友评论

        本文标题:RxJava学习(三)concat和firstElement操作

        本文链接:https://www.haomeiwen.com/subject/zpqkhftx.html