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);
}
});
}