它是一个完全独立的类,也是Context抽象类的一个元素,context可以通过方法得到SharedPreference
context.getSharedPreferences(String name,int mode);即使在不同的地方,传入同样的name,也会得到相同的SharedPreferences。
name 即为待操作的文件,若是不存在,则会帮你创建一个。
mode: 默认为0 或者写MODE_PRIVATE , 还有MODE_WORLD_READABLE,MODE_WORLD_WRITEABLE。
要修改文件则是必须使用 SharedPrefernces.Editor
SharedPreference只能储存基本数据类型(int double float boolean),和String,Set<String> 类型。
通过Editor可以调用一系列put方法 来存值。然后commit();提交。
getXXX(XXX key, XXX defvalue);表示通过key来获取某值,若是没有,则返回后者,作为默认值。
举个例子:存储登录信息。
public class MainActivity extends Activity {
private EditText edit;
private EditText edit2;
private CheckBox box;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit=(EditText) findViewById(R.id.ed_username);
edit2=(EditText) findViewById(R.id.ed_password);
box=(CheckBox) findViewById(R.id.cb_isSave);
Button bt=(Button) findViewById(R.id.bt_login);
SharedPreferences pre=this.getSharedPreferences("login", MODE_PRIVATE);
box.setChecked(pre.getBoolean("check",false));
edit.setText(pre.getString("username",""));
edit2.setText(pre.getString("password", ""));
bt.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Editor editor;
boolean save=box.isChecked();
if(save){
SharedPreferences prefer = MainActivity.this.getSharedPreferences("login", MODE_PRIVATE);
editor = prefer.edit();
editor.putBoolean("check",box.isChecked());
editor.putString("username",edit.getText().toString().trim());
editor.putString("password",edit2.getText().toString().trim());
if(editor.commit())
Toast.makeText(MainActivity.this, "数据储存成功", Toast.LENGTH_SHORT).show();
else
Toast.makeText(MainActivity.this, "数据储存失败", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(MainActivity.this, "数据没有储存", Toast.LENGTH_SHORT).show();
}
}
});
}
}
运行完程序,则会在data/data/包名/shared_prefs 新建一个文件夹,里面有一个xml文件
他是通过xml文件来保存信息的。
总结思路:
获得对象 SharedPreference preference = context.getSharedPreferences -> getXXX(key ,defVal)
保存对象 Editor editor=preference.edit(); -> edit.putXX(key ,value); -> commit() 返回true保存成功,否则保存失败。