SharedPreferences是什么
SharedPreferences是Android平台上的一个轻量级的存储类,用来存储少量数据时简单,便捷。
如何存储数据与读取数据
首先要创建SharedPreferences和SharedPreferences.Editor对象
SharedPreferences sp = getSharedPreferences("everydayData", MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
再通过editor调用put方法
editor.putString("json", s);
最后用Editor对象的commit提交
editor.commit();
记住密码与自动登录案例
完整代码展示:
public class LoginActivity extends AppCompatActivity implements View.OnClickListener {
private EditText number, psw;
private CheckBox jzmm, zddl;
private Button login_btn;
private SharedPreferences sp;
private SharedPreferences.Editor editor;
private ProgressDialog progressDialog;
private static boolean flag = true;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Intent intent = new Intent(LoginActivity.this, ContactsActivity.class);
startActivity(intent);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
bindId();
sp = getSharedPreferences("login", MODE_PRIVATE);
editor = sp.edit();
if (sp.getBoolean("jzmm", false)) {
number.setText(sp.getString("number", ""));
psw.setText(sp.getString("psw", ""));
jzmm.setChecked(true); //将记住密码的勾选状态设定为true
}
//读取数据,判断上次登录是否勾选了自动登录
if (sp.getBoolean("zddl", false)) {
zddl.setChecked(true);
//判断是否同时勾选了记住密码和自动登录,如果是,则调用myDialog()方法进行登录
if (sp.getBoolean("zddl", false) && sp.getBoolean("jzmm", false)) {
myDialog();
}
}
}
private void myDialog() {
//设置一个进度条
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("正在登录");
progressDialog.setCancelable(true);
//当点击取消后,flag = false
progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
flag = false;
}
});
//启动进度条
progressDialog.show();
//开启一个子线程
new Thread(new Runnable() {
@Override
public void run() {
try {
//延迟3s
Thread.sleep(3000);
//判断flag,是否点击过进度条的取消,如果没有,3s后跳转页面
if (flag)
handler.sendEmptyMessage(0);
//清除进度条
progressDialog.dismiss();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
private void bindId() {
number = findViewById(R.id.number);
psw = findViewById(R.id.psw);
jzmm = findViewById(R.id.jzmm);
zddl = findViewById(R.id.zddl);
login_btn = findViewById(R.id.login);
login_btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.login:
//勾选了记住密码就将账号密码还有勾选状态保存
if (jzmm.isChecked()) {
editor.putString("number", number.getText().toString());
editor.putString("psw", number.getText().toString());
editor.putBoolean("jzmm", true);
} else
editor.putBoolean("jzmm", false); //如果没有勾选,则勾选状态为false
//判断自动登录是否勾选了
if (zddl.isChecked())
editor.putBoolean("zddl", true);
else
editor.putBoolean("zddl", false);
editor.commit(); //提交数据
flag = true;
myDialog();
break;
default:
break;
}
}
}
需要注意的点:
判断记住密码是否勾选
if (checkBox1.isChecked()) {
editor.putBoolean("flag", true);
} else {
editor.putBoolean("flag", false);
}
editor.putString("id", numET.getText() + "");
editor.putString("password", pwdET.getText() + "");
editor.commit();
勾选了,就读取账号密码,否则就不记住