在android开发的时候涉及到自动登录方面网上有很多相关的代码,但是在实际应用中常常实现了自动登录功能后,在退出登陆返回登陆界面后又被强制进入主界面,没有清空之前的登录数据。
(相关的字段根据具体情况更改)
Boolean value = preferences.getBoolean("loginischecked", false);
// 自动登录
if (preferences.getBoolean("loginischecked", false)) {
login_btn.setChecked(value);
if (!TextUtils.isEmpty(appUserName.getText().toString())
&& !TextUtils.isEmpty(appUserName.getText().toString())) {
userNameStr = appUserName.getText().toString();
userPassStr = appUserPass.getText().toString();
relative_layout.setVisibility(View.VISIBLE);
loading.startAnimation(animation); // 向服务端请求数据
ApplicationData.getExecutorService().submit(loginRun);
}
} else {
login_btn.setChecked(false);
}
在点击登录按钮需设置自动登录数据存储以便下次登录
private SharedPreferences preferences;
public static SharedPreferences.Editor editor;
preferences = getSharedPreferences("config", MODE_PRIVATE);
// 记住密码
if (password_btn.isChecked()) {
editor = preferences.edit();
editor.putString("username", userNameStr);
editor.putString("userpassword", userPassStr);
editor.putBoolean("ischecked", true);
editor.putBoolean("loginischecked", true);
} else {
editor = preferences.edit();
editor.putString("username", "");
editor.putString("userpassword", "");
editor.putBoolean("ischecked", false);
editor.putBoolean("loginischecked", false);
}
if (login_btn.isChecked()) {
editor.putBoolean("loginischecked", true);
} else {
editor.putBoolean("loginischecked", false);
}
editor.commit();
在退出事件时需要清空数据以解决重复登录的问题
添加方法
private void clear() {
// TODO Auto-generated method stub
preferences = getSharedPreferences("config", MODE_PRIVATE);
editor = preferences.edit();
editor.putString("username", "");
editor.putString("userpassword", "");
editor.putBoolean("ischecked", false);
editor.putBoolean("loginischecked", false);
editor.commit();
}
这样一个完整的记住密码自动登录及退出循环就结束了。