记住密码以及自动登录的实现主要依赖于SharedPreferences类的使用,SharedPreferences是一个轻量级的存储类,用于存储一些小数据,比如登录账号密码以及状态信息等。
本文章只针对本人毕设的登录页面中的记住密码以及自动登录做出一些简单的解释。如果需要了解登录页面实现的完整代码请点击下面链接。
记住密码和自动登录使用复选框来实现,并设置了全局变量接收当前记住密码以及自动登录的状态。
//复选框
private CheckBox mRemenber;//记住密码
private boolean mPasswordFlag = false;//记住密码标志
private CheckBox mAutoLogin;//自动登录
private boolean mAutoLoginFlag = false;//自动登录标志
使用SharedPreferences时在页面初始化的时候实例,也就是在onCreate()中实现,在实例该类时会在本地创建一个文件,需要给该文件命名。下面是初始化页面时从已存在的文件中读取信息。
SharedPreferences sharedPreferences = getSharedPreferences("busApp", MODE_PRIVATE);
//如果不为空
if (sharedPreferences != null) {
String userName = sharedPreferences.getString("username", "");
userPassword = sharedPreferences.getString("password", "");
mPasswordFlag = sharedPreferences.getBoolean("remenber", false);
mAutoLoginFlag = sharedPreferences.getBoolean("auto", false);
mPhoneText.setText(userName);
}
//确定为true获取 记住密码,打钩
if (mPasswordFlag) {
mRemenber.setChecked(true);
mPasswordText.setText(userPassword);
}
//选择了自动登录后直接登录
if (mAutoLoginFlag){
mAutoLogin.setChecked(true);
String username = mPhoneText.getText().toString();
String password = mPasswordText.getText().toString();
login(username,password);
}
//注册监听
mRemenber.setOnClickListener(mListener);
mRemenber.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//记住密码
//如果是选中记住密码,取消记住密码、自动登录
if (!isChecked){
mAutoLogin.setChecked(false);
//清空密码输入框
mPasswordText.setText("");
}
}
});
在登录时将登录页面的所有信息存放到存储文件中。
//1 创建 SharePreferences 对象
String username = mPhoneText.getText().toString();
String password = mPasswordText.getText().toString();
Log.d("输入框获取的密码", "onClick: " + password);
//没有记住密码时 MD5密码加密
SharedPreferences sharedPreferences = getSharedPreferences("busApp", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
//2 创建Editor对象,写入值
editor.putString("username", username);
if (mRemenber.isChecked()) {
if(!mPasswordFlag){
try {
password = MD5Utils.getMD5(password);
Log.d("记住密码选中且false加密后密码", "onClick: " + password);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
mPasswordFlag = true;
}
editor.putBoolean("remenber", mPasswordFlag);
editor.putString("password", password);
Log.d("记住密码选中写入的密码", "onClick: " + password);
//选中自动登录
if (mAutoLogin.isChecked()){
mAutoLoginFlag = true;
}else{
mAutoLoginFlag = false;
}
editor.putBoolean("auto", mAutoLoginFlag);
} else {
if(!mPasswordFlag){
try {
password = MD5Utils.getMD5(password);
Log.d("记住密码未选中且false加密后密码", "onClick: " + password);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
//取消自动登录和记住密码,清空密码
mPasswordFlag = false;
mAutoLoginFlag = false;
editor.putString("password", "");
editor.putBoolean("remenber", mPasswordFlag);
editor.putBoolean("auto", mAutoLoginFlag);
}
//3 提交
editor.commit();
在执行登录之前一定要提交,commit()会将内存中的数据存储到硬盘上