android提供了一种轻量级技术用于保存应用程序的用户首选项或者应用程序的设置。
SharedPreference使我们能够将一组原始数据的键值对保存为命名的首选项。
创建并保存SharedPreference
private SharedPreferences preferences;
preferences = getSharedPreferences("User", Activity.MODE_PRIVATE);
为了修改一个SharedPreference,可以使用SharedPreference.Editor类。通过在希望修改的SharedPreference对象上调用edit()来获取对象。
SharedPreferences.Editor editor = preferences.edit();
editor.putString("UserName",et_userName.getText().toString());
editor.putString("Password",et_password.getText().toString());
editor.apply();
要保存编辑动作,只需要调用Editor对象的apply()或者commit()来分别异步或者同步保存更改。
所以更好选用apply()。
获取数据时,直接使用SharedPreference对象的类型安全的get()即可。
preferences.getString("UserName",null);
或者调用getAll()来获取所有可用的SharedPreference键值对的一个映射。
final Map<String,?> userAll = preferences.getAll();
if(userAll!=null && userAll.hashCode()>0){
et_userName.setText(userAll.get("UserName").toString());
et_password.setText(userAll.get("Password").toString());
}
使用SharedPreference的自动填写
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
et_userName = (EditText)findViewById(R.id.et_userName);
et_password = (EditText)findViewById(R.id.et_password);
btn_cancle = (Button)findViewById(R.id.btn_cancle);
btn_login = (Button)findViewById(R.id.btn_login);
preferences = getSharedPreferences("User", Activity.MODE_PRIVATE);
final Map<String,?> userAll = preferences.getAll();
if(userAll!=null && userAll.hashCode()>0){
et_userName.setText(userAll.get("UserName").toString());
et_password.setText(userAll.get("Password").toString());
}
btn_cancle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(et_userName.getText().length()>0 || et_password.getText().length()>0) {
et_userName.setText("");
et_password.setText("");
}
else System.exit(0);
}
});
btn_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(et_userName.getText().toString().equals("admin") && et_password.getText().toString().equals("admin")){
SharedPreferences.Editor editor = preferences.edit();
editor.putString("UserName",et_userName.getText().toString());
editor.putString("Password",et_password.getText().toString());
editor.apply();
Log.i("Login","登录成功,"+et_userName.getText().toString());
Toast.makeText(MainActivity.this,"登录成功!",Toast.LENGTH_LONG).show();
}
else {
Log.e("Login","登录失败:"+et_userName.getText().toString());
Toast.makeText(MainActivity.this, "登录失败!", Toast.LENGTH_SHORT).show();
}
}
});