android中获取手机验证码的倒计时操作

话不多说,直接上代码

private EditText et;
	private Button btn;
	private static final String PHONE_PATTERN = "[1]{1}[3,4,5,8]{1}[0-9]{9}";
	private static final String EMAIL_PATTERN = "^([a-zA-Z0-9]+[_|\\-|\\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\\-|\\.]?)*[a-zA-Z0-9]+\\.[a-zA-Z]{2,3}$";
	private int time = 120;
	private Timer timer = new Timer();
	TimerTask task;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		et = (EditText) findViewById(R.id.edittext);
		btn = (Button) findViewById(R.id.button);
		btn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				String s = et.getText().toString();
				if(isValidPhone(s)){
					Toast.makeText(MainActivity.this, "此处很可能是手机号", Toast.LENGTH_SHORT).show();
				}else if(isValidEmail(s)){
					Toast.makeText(MainActivity.this, "此处很可能是邮箱", Toast.LENGTH_SHORT).show();
				}else{
					btn.setEnabled(false);
					task = new TimerTask() {
						@Override
						public void run() {

							runOnUiThread(new Runnable() { // UI thread
								@Override
								public void run() {
									if (time <= 0) {
										btn.setEnabled(true);
										btn.setText("获取验证码");
										task.cancel();
									} else {
										btn.setText("" + time);
									}
									time--;
								}
							});
						}
					};
					time = 10;
					timer.schedule(task, 0, 1000);
				}
			}
		});
	}

	private boolean isValidPhone(String phone) {
		if (TextUtils.isEmpty(phone))
			return false;
		return phone.matches(PHONE_PATTERN);
	}

	private boolean isValidEmail(String email) {
		if (TextUtils.isEmpty(email))
			return false;
		return email.matches(EMAIL_PATTERN);
	}

代码中加了个邮箱与手机号的判断,分别有各自的方法,鞋友们可以参考,有更好更简便更准确的还麻烦提醒一下。

此处用了timer.schedule(task, 0, 1000); 其中的参数第一个代表所执行的任务,第二个代表第一次执行的延迟时间,第三个代表多长时间执行一次。这段代码需要注意的是任务可以取消,每次倒计时的时候都新建一个任务,但是别把timer取消了,否则会出错。  一般最好的处理办法就是加了个btn.setEnabled(false);来控制按钮的点击事件。


btn.setEnabled(false);
btn.setEnabled(false);

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值