美文网首页Android
RxJava - interval操作符实现“验证码倒计时”效果

RxJava - interval操作符实现“验证码倒计时”效果

作者: 楷桐 | 来源:发表于2017-12-16 23:45 被阅读753次
    • Observable.interval(0, 1, TimeUnit.SECONDS)
      参数一:什么时候开始发送
      参数二:隔多长时间发一次
      参数三:计时的单位,是秒还是毫秒

    • .take(count)
      发送验证码,到60肯定会停下来,总不能一直发射数据吧。take就是发射数据后控制什么时候停下来

    • .map
      耳熟能详,就是用来把发射出去的值转换一下,转成你想要的。比如不用map,发射出的数据就是1,2,3,4,5, 使用了map,我在最终接收数据前,把发射的数据转换一下,就变成了 5,4,3,2,1

    • .doOnSubscribe
      在 subscribe() 调用后而且在事件发送前执行;默认情况下, doOnSubscribe() 执行在 subscribe() 发生的线程

     /**
         * 发送验证码倒计时
         *
         * @param view
         */
        public void sendVerfi(final View view) {
            final int count = 5;
    
            Observable.interval(0, 1, TimeUnit.SECONDS)
                    .take(count)
                    .map(new Function<Long, Long>() {
                        @Override
                        public Long apply(Long aLong) throws Exception {
                            return count - aLong;
                        }
                    })
                    .observeOn(AndroidSchedulers.mainThread())
                    .doOnSubscribe(new Consumer<Disposable>() {
                        @Override
                        public void accept(Disposable disposable) throws Exception {
                            view.setEnabled(false);
                        }
                    })
                    .subscribe(new Observer<Long>() {
                        @Override
                        public void onSubscribe(Disposable d) {
    
                        }
    
                        @Override
                        public void onNext(Long aLong) {
                            ((Button) view).setText(aLong + "");
                        }
    
                        @Override
                        public void onError(Throwable e) {
    
                        }
    
                        @Override
                        public void onComplete() {
                            view.setEnabled(true);
                        }
                    });
        }
    

    相关文章

      网友评论

        本文标题:RxJava - interval操作符实现“验证码倒计时”效果

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