您的位置:首页 > 移动开发 > Android开发

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

2014-04-02 20:27 351 查看
话不多说,直接上代码

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息