Android studio使用SharedPreferences存储数据实现记住密码
activity代码
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
public class File extends AppCompatActivity {
private final static String SP_INFO="Login";
private final static String USERNAME="username";
private final static String PASSWORD="password";
private final static String IF_REMEMBER_USERNAME = "IF_REMEMBER_USERNAME"; // 后面的字符串一定要唯一,不然,就是相同的 key,key 以 key 的值做区分,即以字符串做区分,不以 key 名做区分
private final static String IF_REMEMBER_PASSWORD = "IF_REMEMBER_PASSWORD";
private EditText editText, editText2;
private CheckBox checkBox, checkBox2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_file);
init();
Button tt =(Button)findViewById(R.id.button2);
tt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent startIntent = new Intent(getApplicationContext(),MainActivity.class);
//show how to pass information to another activity
// startIntent.putExtra("com.example.myapplication.Main2Activity","HELLO WORLD!");
startActivity(startIntent);
}
});
}
@Override
protected void onStop(){
super.onStop();
checkIfRemember();
}
@Override
protected void onStart() {
super.onStart();
recoverData();
}
public void init(){
editText = (EditText)findViewById(R.id.editText);
editText2 = (EditText)findViewById(R.id.editText2);
checkBox = (CheckBox)findViewById(R.id.checkBox);
checkBox2 = (CheckBox)findViewById(R.id.checkBox2);
}
public void remember(String username, String password, boolean if_remember_username, boolean if_remember_password){
SharedPreferences sp = getSharedPreferences(SP_INFO, MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString(USERNAME, username); // 保存数据,以键值对保存,(USERNAME, username)为一对键值对 (key, value)
editor.putString(PASSWORD, password);
editor.putBoolean(IF_REMEMBER_USERNAME, if_remember_username);
editor.putBoolean(IF_REMEMBER_PASSWORD, if_remember_password);
editor.commit(); // 提交更新的数据
}
public void checkIfRemember(){
String username = null;
String password = null;
boolean if_remember_password = false;
boolean if_remember_username = false; // 这些变量如果不初始化的话,在使用时,会报不初始化的错误;
if (checkBox.isChecked()){
username = editText.getText().toString();
if_remember_username = true;
}
if (checkBox2.isChecked()){
password = editText2.getText().toString();
if_remember_password = true;
}
this.remember(username, password, if_remember_username, if_remember_password);
}
public void recoverData(){
SharedPreferences sp = getSharedPreferences(SP_INFO, MODE_PRIVATE);
editText.setText(sp.getString(USERNAME, null));
// editText2.setText(sp.getString(PASSWORD, null));
editText2.setOnFocusChangeListener(new android.view.View.
OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
// 此处为得到焦点时的处理内容
SharedPreferences sp = getSharedPreferences(SP_INFO,MODE_PRIVATE);
editText2.setText(sp.getString(PASSWORD, null));
} else {
// 此处为失去焦点时的处理内容
}
}
});
checkBox.setChecked(sp.getBoolean(IF_REMEMBER_USERNAME, false));
checkBox2.setChecked(sp.getBoolean(IF_REMEMBER_PASSWORD,false));
}
}
xml文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".File">
<EditText
android:id="@+id/editText"
android:layout_width="200dp"
android:layout_height="40dp"
android:layout_alignParentTop="true"
android:layout_marginTop="26dp"
android:layout_toStartOf="@+id/checkBox"
android:layout_toLeftOf="@+id/checkBox" />
<EditText
android:id="@+id/editText2"
android:layout_width="200dp"
android:layout_height="40dp"
android:layout_below="@+id/editText"
android:layout_alignStart="@+id/editText"
android:layout_marginTop="71dp"
android:layout_alignLeft="@+id/editText" />
<CheckBox
android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/editText"
android:layout_alignParentEnd="true"
android:checked="false"
android:layout_alignParentRight="true" />
<CheckBox
android:id="@+id/checkBox2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/editText2"
android:layout_alignParentEnd="true"
android:checked="false"
android:layout_alignParentRight="true" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/editText"
android:layout_alignParentStart="true"
android:gravity="center"
android:text="Username"
android:textSize="20dp"
android:layout_alignParentLeft="true" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/editText2"
android:layout_alignParentStart="true"
android:gravity="center"
android:text="Password"
android:textSize="20dp"
android:layout_alignParentLeft="true" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/editText2"
android:layout_marginBottom="-89dp"
android:text="Button" />
</RelativeLayout>