一、 sharedPreferences与Editor简介
1、 SharedPerferences保存的数据主要是类似配置信息格式的数据,因此它保存的数据主要是简单类型的key-value对,SharedPreferences本身并没有写入数据的能力,而是通过Sharedpreferences的内部接口来实现,SharedPreferences调用edit()方法即可获得他所对应的Editor对象,Editor提供了很多方法来对数据进行操作:
(1)、SharedPreferences.Editor clear():清空SharedPreferences里面的所有数据;
(2)SharedPreferences.Editor.putXX:向SharedPreferences里面存入指定的key对应的数值,其中XX是存入数据的基本类型;
(3)SharedPreferences.Editor.remove(String key):删除SharedPreferences里指定的key对应的数据的项;
(5)boolean commit()当Editor编辑完成后调用该方法提交修改。
2、SharedPreferences.本身是一个接口,程序无法直接创建SharedPreferences.实例,只能通过Context提供的get SharedPreferences.(String name ,int mode)方法来获取SharedPreferences.实例;其中的mode可以取得值有以下几个:
Context.Mode_Private:指定的SharedPreferences数据只能被本应由程序本身读写;
Context.Mode_WORLD_PRIVATE:指定该SharedPreferences数据能被其他应由程序读但是不能写;
Context.Mode_WORLD_WRITEABLE:指定该SharedPreferences数据能被其他应用程序读、写
二、 下面介绍一个实例来演示向SharedPreferences的读写
页面布局部分不再予以说明:可自定义;
下面来看一下程序的功能实现代码:
public class SharedPreferencesTestActivity extends Activity implements
OnClickListener {
Button saveBtn, readBtn;
EditText nameEt, ageEt;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViews();
}
private void findViews() {
nameEt = (EditText) this.findViewById(R.id.nameEt);
ageEt = (EditText) this.findViewById(R.id.ageEt);
saveBtn = (Button) this.findViewById(R.id.saveBtn);
readBtn = (Button) this.findViewById(R.id.readBtn);
saveBtn.setOnClickListener(this);
readBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
String name = "无名氏";
int age = -1;
//获取的是其他应用也可读写的SharedPreferences对象
SharedPreferences shared = this.getSharedPreferences("info",
Context.MODE_WORLD_READABLE );
switch (v.getId()) {
//写入
case R.id.saveBtn:
name = nameEt.getText().toString().trim();
age = Integer.valueOf(ageEt.getText().toString().trim());
Editor editor = shared.edit();
editor.putString("name", name);
editor.putInt("age", age);
// 保证操作的事务完整性
editor.commit();
break;
case R.id.readBtn:
//读取
name = shared.getString("name", "无名氏");
age = shared.getInt("age", -1);
Toast.makeText(this, "name="+name+ " age="+age, Toast.LENGTH_LONG).show();
break;
}
}
}
具体运行的页面:
点击保存然后在点击读取之后:
三、 下面通过一个实例来介绍读、写其他应用的SharedPreferences;
首先要读写其他的应用的SharedPreferences应指定了访问权限,应当设置为允许其他程序可读写;
具体的步骤:
1、 需要创建其他应用的对应的Context:
Context otherContext = this.createPackageContext(
"cn.class3g.activity", Context.CONTEXT_IGNORE_SECURITY);
上面的 "cn.class3g.activity" 就是其他程序所在的包。
2、 调用其他程序的Context的getSharedPreferences(String name,int mode)即可获取对应的SharedPreferences对象;
3、 如果需要像其他程序写入数据,只需调用SharedPreferences的edit()方法获取相应的Editor就可以了!
下面是一段读取其他程序SharedPreferences的代码:
public class ReadOtherSharedPreferencesActivity extends Activity implements
OnClickListener {
Button readBtn;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViews();
}
private void findViews() {
readBtn = (Button) this.findViewById(R.id.readOther);
readBtn.setOnClickListener(this);
}
public void onClick(View v) {
if (v.getId() == R.id.readOther) {
try {
Context otherContext = this.createPackageContext(
"cn.class3g.activity", Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences shared = otherContext.getSharedPreferences(
"info", MODE_PRIVATE);
String res = "name=" + shared.getString("name", "wms")+
" age="+ String.valueOf(shared.getInt("age", -1));
Toast.makeText(this, res, Toast.LENGTH_LONG).show();
} catch (NameNotFoundException e) {
e.printStackTrace();
}
}
}
}
运行效果:和在程序本身获取的效果是一样