前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RxJava从入门到不离不弃(五)——do操作符

RxJava从入门到不离不弃(五)——do操作符

作者头像
蜻蜓队长
发布2018-10-18 11:43:35
1.5K0
发布2018-10-18 11:43:35
举报
文章被收录于专栏:Android机动车Android机动车

好久没有更新RxJava系列文章了,今天整理一番do系列操作符与大家分享。

对于do系列操作符理解比较容易,他相当于给Observable执行周期的关键节点添加回调。当Observable执行到这个阶段的时候,这些回调就会被触发。

在Rxjava do系列操作符有多个,如doOnNext,doOnSubscribe,doOnUnsubscribe,doOnCompleted,doOnError,doOnTerminate和doOnEach。

当Observable每发送一个数据时,doOnNext会被首先调用,然后再onNext。若发射中途出现异常doOnError会被调用,然后onError。若数据正常发送完毕doOnCompleted会被触发,然后执行onCompleted。当订阅或者解除订阅doOnSubscribe,doOnUnsubscribe会被执行。

举个例子:

代码语言:javascript
复制
        Observable.just(1, 2, 3)
                .doOnNext(new Action1<Integer>() {
                    @Override
                    public void call(Integer integer) {
                        Log.e(TAG, "doOnNext: " );
                    }
                })
                .doOnError(new Action1<Throwable>() {
                    @Override
                    public void call(Throwable throwable) {
                        Log.e(TAG, "doOnError: " );
                    }
                })
                .doOnCompleted(new Action0() {
                    @Override
                    public void call() {
                        Log.e(TAG, "doOnCompleted: " );
                    }
                })
                .doOnSubscribe(new Action0() {
                    @Override
                    public void call() {
                        Log.e(TAG, "doOnSubscribe: " );
                    }
                })
                .doOnUnsubscribe(new Action0() {
                    @Override
                    public void call() {
                        Log.e(TAG, "doOnUnsubscribe: " );
                    }
                })
                .doOnTerminate(new Action0() {
                    @Override
                    public void call() {
                        Log.e(TAG, "doOnTerminate: " );
                    }
                })
                .doAfterTerminate(new Action0() {
                    @Override
                    public void call() {
                        Log.e(TAG, "doAfterTerminate: " );
                    }
                })
                .subscribe(new Subscriber<Integer>() {
                    @Override
                    public void onCompleted() {
                        Log.e(TAG, "onCompleted1: ");
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e(TAG, "onError1: ");
                    }

                    @Override
                    public void onNext(Integer integer) {
                        Log.e(TAG, "onNext1: " + integer);
                    }
                });

输出结果:

代码语言:javascript
复制
doOnSubscribe: 
doOnNext: 
onNext1: 1
doOnNext: 
onNext1: 2
doOnNext: 
onNext1: 3
doOnCompleted: 
doOnTerminate: 
onCompleted1: 
doOnUnsubscribe: 
doAfterTerminate:

这里要特殊介绍到一个操作符——就是doOnEach:

doOnEach顾名思义,就是在执行观察者的每一个方法之前,都会先执行一遍doOnNext。这里的doOnEach传入一个Subscriber参数,需要实现其三个对应方法,具体参照一下代码:

代码语言:javascript
复制
        Observable.just(1,2,3)
                .doOnEach(new Subscriber<Integer>() {
                    @Override
                    public void onCompleted() {
                        Log.e(TAG, "onCompleted: " );
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e(TAG, "onError: " );
                    }

                    @Override
                    public void onNext(Integer integer) {
                        Log.e(TAG, "onNext: "+integer);
                    }
                }).subscribe(new Subscriber<Integer>() {
            @Override
            public void onCompleted() {
                Log.e(TAG, "onCompleted1: " );
            }

            @Override
            public void onError(Throwable e) {
                Log.e(TAG, "onError1: " );
            }

            @Override
            public void onNext(Integer integer) {
                Log.e(TAG, "onNext1: "+integer);
            }
        });

输出结果:

代码语言:javascript
复制
onNext: 1
onNext1: 1
onNext: 2
onNext1: 2
onNext: 3
onNext1: 3
onCompleted: 
onCompleted1: 

do系列操作符相对简单,就不做过多介绍了。

更多精彩内容,欢迎关注我的微信公众号——Android机动车

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Android机动车 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档