RxJava2学习之十:发送验证码倒计时

CountDownTimer实现

Android提供一个CountdownTimer的类,采用Handler的方式实现,实现倒数计时的功能。

//第一个参数表示总时间,第二个参数表示间隔时间。单位ms,意思就是每隔100ms会回调一次方法onTick
new CountDownTimer(1000, 100) {
    @Override
    public void onTick(long l) {
        Log.i(TAG, "onTick: " + l);
    }

    @Override
    public void onFinish() {
        Log.i(TAG, "onFinish: ");
    }
}.start();

RxJava实现

RxJava操作符

本例涉及的RxJava操作符:

  • Interval创建一个定时发射整数序列的Observable

RxJava实现

public void sendVerificationCode(View view) {
    final Button button = (Button) this.findViewById(R.id.send_verification_code);
    final long count = 10;
    Observable.interval(0, 1, TimeUnit.SECONDS)
        .take(count+1)
        .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 {
                button.setBackgroundColor(Color.parseColor("#A5A5A5"));
                button.setEnabled(false);
            }
        })
        .subscribe(new Observer<Long>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(Long value) {
                Log.i(TAG, "onNext: " + value);
                button.setText("剩余 " + value + " 秒");
            }

            @Override
            public void onError(Throwable e) {
                e.printStackTrace();
            }

            @Override
            public void onComplete() {
                Log.i(TAG, "onComplete: ");
                button.setEnabled(true);
                button.setBackgroundColor(Color.parseColor("#3BC1FF"));
                button.setText("发送验证码");
            }
        });
}

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/02/25/rxjava2-learning-10-countdown-to-sending-verification-codes/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
RxJava2学习之十:发送验证码倒计时
CountDownTimer实现 Android提供一个CountdownTimer的类,采用Handler的方式实现,实现倒数计时的功能。 //第一个参数表示总时间,第二个参数表示间隔时间。……
<<上一篇
下一篇>>
文章目录
关闭
目 录