每日总结2023-05-17
今天对于记住密码和自动登录仍有不理解的地方,用别人的流程过了一遍仍是未记住密码。
别人的一般流程:
记住密码和自动登录使用复选框来实现,并设置了全局变量接收当前记住密码以及自动登录的状态。
//复选框 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()会将内存中的数据存储到硬盘上。

浙公网安备 33010602011771号