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("发送验证码");
            }
        });
}
上一篇 RxJava2学习之九:购物车合并本地和网络数据
下一篇 Android Gradle 4.1以上依赖变化:compile->api和implementation
目录
文章列表
1 有赞前端组件库Vant
有赞前端组件库Vant
2
Vue 3.0 特性体验
Vue 3.0 特性体验
3
Appium自动化测试(6)—— python-client安装与测试
Appium自动化测试(6)—— python-client安装与测试
4
Redis 查看所有 key 的 value 值所占内存大小
Redis 查看所有 key 的 value 值所占内存大小
5
CentOS下安装Git rpm包
CentOS下安装Git rpm包
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。