先不使用Handler
内Timer
只使用Handler
的为佳。
有一个变量,用于存储点击
private int clickCount = 0;
,并在您的按钮onClick()
做这样
@Override
public void onClick(View view){
if(v == btn_login && clickCount < 5){
if(WrongPassword){
clickCount++;
if(clickCount == 5){
showAlert();
}
}else{
clickCount = 0;
// put your login code here
}
}
}
private long mLastClickTime = 0
private void showAlert(){
mLastClickTime = SystemClock.elapsedRealtime();
alert("Your account has been blocked for 15 minutes due to 5 unsuccessfull attempts.");
SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
editor.putLong("mLastClickTime", mLastClickTime);
editor.commit();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
dismiss();
clickCount = 0;
}
}, 900000);
}
终于在onCreate()
你需要检查之前用户试图超过5次或没有(如果用户杀死应用立即回来)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
Long oldLastClick = prefs.getLong("mLastClickTime", 0);
if (oldLastClick != 0) {
Long currentTime = SystemClock.elapsedRealtime();
if((currentTime < oldLastClick) < 90000){
clickCount = 5;
alert("Your account has been blocked for 15 minutes due to 5 unsuccessfull attempts.");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
dismiss();
clickCount = 0;
}
}, (currentTime - oldLastClick));
return;
}
}
}
只是不讨好 – Stefan
把警报这里 –
代码这种方法暂时禁止登录可以与一个应用程序重启很容易被绕过,使用共享的喜好来跟踪在登录计数。检查http://stackoverflow.com/questions/20606738/temporarily-disable-login-after-failed-attempts – RamithDR