android 记住密码选择狂,说说在 Android 中如何实现记住密码功能

我们使用 SharedPreferences 技术来实现记住密码功能。

android:layout_width="match_parent"

android:layout_height="match_parent"

android:gravity="center_horizontal"

android:orientation="vertical">

android:layout_width="match_parent"

android:layout_height="60dp"

android:orientation="horizontal">

android:layout_width="90dp"

android:layout_height="wrap_content"

android:layout_gravity="center_vertical"

android:text="账号:"

android:textSize="18sp" />

android:id="@+id/account"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_gravity="center_vertical"

android:layout_weight="1" />

android:layout_width="match_parent"

android:layout_height="60dp"

android:orientation="horizontal">

android:layout_width="90dp"

android:layout_height="wrap_content"

android:layout_gravity="center_vertical"

android:text="密码:"

android:textSize="18sp" />

android:id="@+id/password"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_gravity="center_vertical"

android:layout_weight="1"

android:inputType="textPassword" />

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

android:id="@+id/remember_pwd"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="记住密码"

android:textSize="18sp" />

android:id="@+id/login"

android:layout_width="match_parent"

android:layout_height="60dp"

android:text="登录" />

这里添加了 CheckBox 控件来勾选【记住密码】,接着修改 LoginActivity :

ublic class LoginActivity extends BaseActivity {

private static final String TAG = "LoginActivity";

final String REMEMBER_PWD_PREF = "rememberPwd";

final String ACCOUNT_PREF = "account";

final String PASSWORD_PREF = "password";

/**

* AES 工具

*/

private static AES aes = new AES("12345abcdef67890", "1234567890abcdef");

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_login);

final EditText accountEditText = (EditText) findViewById(R.id.account);

final EditText passwordEditText = (EditText) findViewById(R.id.password);

//从 SharedPreferences 中获取【是否记住密码】参数

final SharedPreferences preference = PreferenceManager.getDefaultSharedPreferences(this);

boolean isRemember = preference.getBoolean(REMEMBER_PWD_PREF, false);

final CheckBox rememberPwd = (CheckBox) findViewById(R.id.remember_pwd);

if (isRemember) {//设置【账号】与【密码】到文本框,并勾选【记住密码】

accountEditText.setText(preference.getString(ACCOUNT_PREF, ""));

passwordEditText.setText(aes.decode(preference.getString(PASSWORD_PREF, "")));

rememberPwd.setChecked(true);

}

Button loginBtn = (Button) findViewById(R.id.login);

loginBtn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

String account = accountEditText.getText().toString();

String password = passwordEditText.getText().toString();

if (account.equals("admin") && password.equals("1")) {//登录成功

SharedPreferences.Editor editor = preference.edit();

if (rememberPwd.isChecked()) {//记住账号与密码

editor.putBoolean(REMEMBER_PWD_PREF, true);

editor.putString(ACCOUNT_PREF, account);

editor.putString(PASSWORD_PREF, aes.encode(password));

} else {//清空数据

editor.clear();

}

editor.apply();

startActivity(new Intent(LoginActivity.this, MainActivity.class));

finish();

} else {//登录失败,弹出提示

Toast.makeText(LoginActivity.this, "账号或密码不正确", Toast.LENGTH_SHORT).show();

}

}

});

}

}

这里调用 CheckBox 的 isChecked() 方法来获取勾选状态。如果选中,则表示用户想让应用记住密码,我们就把用户的账号与密码都存入 SharedPreferences 文件;如果没有选中,则直接清除 SharedPreferences 文件中的数据即可。

这里采用 AES 对称加密算法,因为保存在 SharedPreferences 文件中的密码必须加密,否则可能存在安全隐患。之所以必须是对称加密,因为当应用打开登录页时,必须把 SharedPreferences 文件中的密码解密出来,才能真正使用它。

引入 AES 后,可能会出现找不到 sun.misc.BASE64Decoder 与 sun.misc.BASE64Encoder

的问题。

因为 Android 没有把这个加入到基础包中,请在这里下载 BASE64Encoder.jar,并引入到 Android Studio 的项目依赖中(File → Project Structure → app → Dependencies)。

a0a7d2018c41

加入 BASE64Encoder.jar 的依赖包

运行程序:

a0a7d2018c41

记住密码功能演示

第一次点击【记住密码】,登录后再退出。下一次登录就会记住密码啦 O(∩_∩)O~

打开 preferences 文件,可以看到我们的密码已经是加密过的咯:

IXi1FhgynLxu8hzlfB4L4Q==

admin

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值