当前位置: 移动技术网 > IT编程>移动开发>Android > RxJava的concat操作符

RxJava的concat操作符

2019年12月26日  | 移动技术网IT编程  | 我要评论

艾叶油软胶囊,锐捷4.44下载,手机充值卡货源

更多文章请点击

转载请标明出处:https://www.cnblogs.com/tangzh/p/12088332.html

 

使用场景一:

现在要执行两个任务:

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操作符:按照顺序依次遍历被观察者中事件,事件不为空,则停止遍历。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网