RxJava是在2016年左右火起来的,现已成为各大项目平台必用的框架,通常与MVP模式、Retrofit网络框架组合起来,为开发者提供更为强大,稳定的开发基础框架,还记得熟悉mvc开发的我第一次见到该框架时,初识繁琐,后知其妙,接下来简单做下有关倒计时功能的整理,一般在注册模块中,给新手机号发送验证码会用得到,本文仅提供倒计时的方法,相关请求验证码下发接口的功能需要大家自己去请求集成。
效果图:
手机不方便截动图,所以在后台日志打印出来,大家使用过程中,把打印出来的值setText到发送按钮上即可。
实现方法:
1.首先添加RxJava和RxAndroid依赖
2.在Activity给发送按钮设置点击事件
private Disposable disposable;
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
disposable= Flowable
.intervalRange(1, 20, 0, 1, TimeUnit.SECONDS)//从1输出到20,延时0s,间隔1s
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
Log.d("fantasychongstatus", String.valueOf(20- aLong));
btn.setText((20- aLong)+ "秒后重发");
btn.setClickable(false);
}
})
.doOnComplete(new Action() {
@Override
public void run() throws Exception {
Log.d("fantasychongstatus", "计时完成");
btn.setText("获取验证码");
btn.setClickable(true);
}
})
.subscribe();
}
});
值得一提的是,在输出数值的过程中,我们要把发送按钮设为不可点击,否则再次点击会再次输出,造成多重输出的现象。
等输出完成后,再重新设置可点击即可。
.doOnNext(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
Log.d("fantasychongstatus", String.valueOf(20- aLong));
btn.setText((20- aLong)+ "秒后重发");
btn.setClickable(false);
}
})
.doOnComplete(new Action() {
@Override
public void run() throws Exception {
Log.d("fantasychongstatus", "计时完成");
btn.setText("获取验证码");
btn.setClickable(true);
}
})
3.最后在onDestroy中dispose
@Override
protected void onDestroy() {
super.onDestroy();
if (disposable!= null){
disposable.dispose();
}
}
至此全部完成,demo附上!