当前位置: 代码迷 >> Android >> Android数据储存之SharedPreferences
  详细解决方案

Android数据储存之SharedPreferences

热度:91   发布时间:2016-05-01 19:07:20.0
Android数据存储之SharedPreferences
从网上资料整理的SharedPreferences应用,记录一下

SharedPreferences是以键值对来存储应用程序的配置信息的一种方式,,它只能存储基本数据类型,类似j2se应用中采用的properties文件。一个程序的配置文件仅可以在本应用程序中使用,或者说只能在同一个包内使用,不能在不同的包之间使用。 实际上SharedPreferences是采用了XML格式将数据存储到设备中,在DDMS中的File Explorer中的/data/data/<package name>/shares_prefs下。

SharedPreferences对象的两个方法:

1.Context.getSharedPreferences(String name,int mode)
name为本组件的配置文件名(如果想要与本应用程序的其他组件共享此配置文件,可以用这个名字来检索到这个配置文件),名称不用带后缀,后缀会由Android自动加上。

mode为操作模式,默认的模式为0或MODE_PRIVATE,如果希望SharedPreferences背后使用的xml文件能被其他应用读和写,可以指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE权限。

2.Activity.getPreferences(int mode)
配置文件仅可以被调用的Activity使用,这个方法默认使用当前类不带包名的类名作为文件的名称。

mode为操作模式,默认的模式为0或MODE_PRIVATE,还可以使用MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE。


如果要读取配置文件信息,只需要直接使用SharedPreferences对象的getXXX()方法即可,而如果要写入配置信息,则必须先调用SharedPreferences对象的edit()方法,使其处于可编辑状态,然后再调用putXXX()方法写入配置信息,最后调用commit()方法提交更改后的配置文件。

以下是示例代码:

import android.app.Activity; import android.content.SharedPreferences; public class Calc extends Activity { public static final String PREFS_NAME = "MyPrefsFile"; . . . @Override protected void onCreate(Bundle state){ super.onCreate(state); . . . //载入配置文件 SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); //或者使用 SharedPreferences settings = getPreferences(0); //getBoolean()第二个参数为缺省值,如果preference中不存在该key,将返回缺省值boolean silent = settings.getBoolean("silentMode", false); setSilent(silent); } @Override protected void onStop(){ super.onStop(); //写入配置文件。可以使用SharedPreferences.Editor来辅助解决。 SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); //获取编辑器SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("silentMode", mSilentMode); editor.commit(); //一定要记得提交 //或者再简单化一可以这样写 SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); setting.edit().putBoolean(“silentMode”,mSilentMode).commit(); } } 


如果访问其他应用中的Preference,前提条件是:该preference创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE权限。如:有个<package name>为cn.itcast.action的应用使用下面语句创建了preference。
getSharedPreferences("itcast", Context.MODE_WORLD_READABLE);
其他应用要访问上面应用的preference,首先需要创建上面应用的Context,然后通过Context 访问preference ,访问preference时会在应用所在包下的shared_prefs目录找到preference :

Context otherAppsContext = createPackageContext("cn.itcast.action", Context.CONTEXT_IGNORE_SECURITY);SharedPreferences sharedPreferences = otherAppsContext.getSharedPreferences("itcast", Context.MODE_WORLD_READABLE);String name = sharedPreferences.getString("name", "");int age = sharedPreferences.getInt("age", 0);


如果不通过创建Context访问其他应用的preference,可以以读取xml文件方式直接访问其他应用preference对应的xml文件,如:

File xmlFile = new File(“/data/data/<package name>/shared_prefs/itcast.xml”);//<package name>应替换成应用的包名
  相关解决方案