//验证码倒计时
private void initRxTimer() {
final int count = 60; //倒计时时间
Observable mObservable = Observable.interval(0, 1, TimeUnit.SECONDS)//设置0延迟,每隔一秒发送一条数据
.take(count + 1)//设置循环次数
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.map(new Function<Long, Long>() {
@Override
public Long apply(Long aLong) throws Exception {
return count - aLong;
}
});
Observer observer = new Observer<Long>() {
@Override
public void onSubscribe(Disposable d) { }
@Override
public void onNext(Long aLong) {//接受到一条就会操作一次UI
tvGetCode.setText(aLong + "s");
}
@Override
public void onError(Throwable e) { }
@Override
public void onComplete() {
tvGetCode.setText("获取验证码");//数据发送完后设置为原来的文字
tvGetCode.setEnabled(true);
}
};
mObservable.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
tvGetCode.setEnabled(false);//在发送数据的时候设置为不能点击
}
}).subscribe(observer);
}