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

CountDownTimer实现

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

1
2
3
4
5
6
7
8
9
10
11
12
//第一个参数表示总时间,第二个参数表示间隔时间。单位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实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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("发送验证码");
}
});
}

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2020 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :