SharedPreference保存的数据主要是类似于配置信息格式的数据,是一个轻量级存储类。保存的数据主要是简单类型的key-value对。
SharedPreference接口本身并没有写入数据的能力,而是通过SharedPreference的内部接口,调用edit()方法可获取它所对应的Editor对象。
使用SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs目录下:
SharedPreferences sharedPreferences = getSharedPreferences("yy", Context.MODE_PRIVATE);
Editor editor = sharedPreferences.edit();//获取编辑器
editor.putString("name", "小白");
editor.putInt("age", 24);
editor.commit();//提交修改
访问SharedPreferences中的数据代码如下:
SharedPreferences sharedPreferences = getSharedPreferences("yy", Context.MODE_PRIVATE);
//getString()第二个参数为缺省值,如果preference中不存在该key,将返回缺省值
String name = sharedPreferences.getString("name", "");
int age = sharedPreferences.getInt("age", 1);
示例如下:
public class MainActivity extends Activity {
Button write,read,save,show;
TextView nameView,ageView,result;
EditText nameEdit,ageEdit;
SharedPreferences preferences, pref;
SharedPreferences.Editor editor, editor2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
write = (Button)findViewById(R.id.write);
read = (Button)findViewById(R.id.read);
save = (Button)findViewById(R.id.save);
show = (Button)findViewById(R.id.show);
nameEdit = (EditText) findViewById(R.id.nameText);
ageEdit = (EditText) findViewById(R.id.ageText);
nameView = (TextView)findViewById(R.id.name);
ageView = (TextView)findViewById(R.id.age);
result = (TextView)findViewById(R.id.contentText);
//获取只能被本应用程序读、写的SharedPreference对象
preferences = getSharedPreferences("mine", MODE_PRIVATE); //min为文件名
editor = preferences.edit();
pref = getSharedPreferences("info", MODE_PRIVATE);
editor2 = pref.edit();
save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = nameEdit.getText().toString();
int age = Integer.parseInt(ageEdit.getText().toString());
editor2.putString("name",name);
editor2.putInt("age",age);
editor2.commit();
}
});
show.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String str = pref.getString("name", "");
int ageNum = pref.getInt("age", 1);
//String result = "姓名:" + str + ", 年龄:" + ageNum;
result.setText("姓名:" + str + ", 年龄:" + ageNum);
}
});
write.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日" + "hh:mm:ss");
//存入数据
editor.putString("time",sdf.format(new Date()));
editor.putInt("random",(int)(Math.random()* 100));
editor.commit(); //提交所存入的数据
}
});
read.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String time = preferences.getString("time",null);
int randNum = preferences.getInt("random", 0);
String result = time==null?"您暂时还未写入时间":"写入时间:" + time + "\n上次生成的随机数:" + randNum;
Toast.makeText(MainActivity.this, result,Toast.LENGTH_LONG).show();
}
});
}
}
运行结果: