本篇文章主要讲解如何实现记住密码功能。
(注意:这里实现的记住密码只是简单的示例,正式项目需要结合加密算法对密码进行保护)
效果如下:可选择记住密码,下次登录自动输出账号密码。
1、编辑登录界面
首先新建项目:BroadcastBestPractice。
编辑登录界面的布局,activity_main.xml文件,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http:///apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="60dp">
<TextView
android:layout_width="90dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textSize="18sp"
android:text="账号:"/>
<EditText
android:id="@+id/account"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_vertical"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="60dp">
<TextView
android:layout_width="90dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textSize="18sp"
android:text="密码:"/>
<EditText
android:id="@+id/password"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:inputType="textPassword"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<CheckBox
android:id="@+id/remrember_pass"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="记住密码"/>
</LinearLayout>
<Button
android:id="@+id/login"
android:layout_width="match_parent"
android:layout_height="60dp"
android:text="登录"/>
</LinearLayout>
效果如下:
2、实现数据存储
修改MainActivity中的代码,如下:
首先在onCreate方法中获取SharedPreferences对象,然后调用它的getBoolean()方法去获取remember_password这个键对应的值,默认为false。
接着判断remember_password对应的值是否为true,如果为true则表示勾选了记住密码,从SharedPreferences存储中获取账号密码,填入到文本框中。
再接着是登录的点击事件,先获取文本框的内容,如果账号和密码对应的上并且勾选了记住密码,则将键写入到SharedPreferences存储中,如果没有勾选则清除。
public class MainActivity extends AppCompatActivity {
private SharedPreferences pref;
private SharedPreferences.Editor editor;
private EditText accountEdit;
private EditText passwordEdit;
private Button login;
private CheckBox rememberPass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
accountEdit = findViewById(R.id.account);
passwordEdit = findViewById(R.id.password);
login = findViewById(R.id.login);
rememberPass = findViewById(R.id.remrember_pass);
pref = PreferenceManager.getDefaultSharedPreferences(this);
boolean isRemember = pref.getBoolean("remember_password",false);
if(isRemember){//将账号密码设置到文本框
String account = pref.getString("account","");
String password = pref.getString("password","");
accountEdit.setText(account);
passwordEdit.setText(password);
rememberPass.setChecked(true);
}
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String account = accountEdit.getText().toString();
String password = passwordEdit.getText().toString();
//如果账号是940107148,且密码是123456,就认为登录成功
if(account.equals("940107148")&&password.equals("123456")){
editor = pref.edit();
if(rememberPass.isChecked()){
editor.putBoolean("remember_password",true);
editor.putString("account",account);
editor.putString("password",password);
}else{
editor.clear();
}
editor.apply();
Toast.makeText(MainActivity.this, "登录成功!", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(MainActivity.this, "密码错误!", Toast.LENGTH_SHORT).show();
}
}
});
}
}
3、效果
不勾选记住密码,返回程序,则文本框全部清除。
勾选记住密码,返回程序,再进入程序文本框会保存上次输入的内容。