android学习—数据存储和IO-SharedPreference和Editor

时间:2024-04-03 08:11:13

一、 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;

}

}

}

具体运行的页面:

android学习—数据存储和IO-SharedPreference和Editor

点击保存然后在点击读取之后:

android学习—数据存储和IO-SharedPreference和Editor

三、 下面通过一个实例来介绍读、写其他应用的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();

}

}

}

}

运行效果:和在程序本身获取的效果是一样

android学习—数据存储和IO-SharedPreference和Editor