所有的应用程序都必然涉及数据的输入与输出。在Android系统中,主要有五种数据存储模式:
其中,前四种为本地数据持久化的存储方式。
本文主要讲解SharedPreferences的使用与应用。
方法 | 描述 |
---|---|
boolean contains (String key) | 判断SharedPreferences是否包含特定key的数据。 |
abstract Map <String, ?> getAll() | 获取SharedPreferences数据中全部的键值对数据集合。 |
abstract Xxx getXxx(String key, Xxx defaultValue) | 获取SharedPreferences数据里指定key对应的value。如果key不存在,则返回defaultValue。其中,Xxx可以是boolean、int、float、long、String。 |
abstract Set <String> getStringSet(String key, Set <String> defValues) | 获取SharedPreferences数据中指定key对应的Set <String> 值。 |
SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过通过SharedPreferences的内部接口SharedPreferences.Editor实现的。SharedPreferences调用edit()方法即可获取它对应的Editor对象。其中Editor对象向SharedPreferences写入数据的方法如下:
方法 | 描述 |
---|---|
abstract SharedPreferences.EditorputXxx(String key, Xxx value) | 向Editor对象存入指定key对应的value数据。其中,Xxx可以是boolean、int、float、long、String。 |
abstract SharedPreferences.Editorclear() | 清空Editor对象中的数据。 |
abstract SharedPreferences.Editorremove(String key) | 删除Editor对象中指定的key对应的数据。 |
abstract SharedPreferences.Editor putStringSet(String key, Set <String> values) | 向Editor对象存入指定key对应的Set <String> 值。 |
abstract boolean commit() | 当Editor对象编辑完成后,调用该方法提交修改。 |
abstract void apply() | 提交Editor对象的修改。 |
SharedPreferences本身是一个接口,不能直接创建SharedPreferences实例,可以通过Context提供的 getSharedPreferences(String name, int mode) 方法来获取SharedPreferences实例。其中,该方法中的mode参数可取的值有:
实例如下:
/* * 创建SharedPreferences实例 * 其中"myPref"指SharedPreferences数据的XML文件名 * 指定该SharedPreferences数据只能被本应用程序读写 */ SharedPreferences pref = getSharedPreferences("myPref", MODE_PRIVATE); // 创建SharedPreferences.Editor对象,用于存储数据修改 SharedPreferences.Editor editor = pref.edit(); // 存储数据信息 editor.putString("name", "zhangsan"); editor.putInt("age", 22); editor.putLong("time", System.currentTimeMillis()); editor.putBoolean("default", true); // 提交数据修改 editor.commit();
这样就完成了SharedPreferences的数据写入了。
在Android Studio的DDMS中可以查看"myPref"XML文件信息。myPref.xml所在的文件目录为 "/data/data/ <包名>
/shared_prefs/myPref.xml" 。DDMS的打开步骤如下:
"Tools"菜单 ->"Android"菜单 -> "Android Device Monitor"菜单,即可打开DDMS。
在DDMS中查看Android虚拟机下对应的"/data/data/ <包名>
/shared_prefs/myPref.xml",并导出myPref.xml至本地电脑中查看,可看到myPref.xml文件内容如下:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <long name="time" value="1449202458471" /> <boolean name="default" value="true" /> <int name="age" value="22" /> <string name="name">zhangsan</string> </map>
所有创建的SharedPreferences数据都可以被本应用访问并进行读写操作。
// 1. 获取SharedPreferences对象 SharedPreferences pref = getSharedPreferences("myPref", MODE_PRIVATE); // 2. 取出数据 String name = pref.getString("name", "defaultName"); Int age = pref.getInt("age", 0); Long time = pref.getLong("time", 0); Boolean default = pref.getBoolean("default", true);
要读写其他应用程序的SharedPreferences,前提是该应用程序的SharedPreferences需要指定相应权限,如Context.MODE_WORLD_READABLE(可读,不可写)、Context.MODE_WORLD_WRITABLE(可读写)。
假设要读取的应用程序的的SharedPreferences数据具有Context.MODE_WORLD_WRITABLE权限。为了读取该应用程序的的SharedPreferences,步骤如下:
创建其他应用程序对应的Context的方法如下:
createPackageContext(String packageName, int flags)
其中packageName为该应用程序的包名。flag表示该应用程序的安全限制标记。flag的取值如下:
示例:
otherAppContext = createPackageContext("cn.edu.sysu.ce.hope", Context.CONTEXT_IGNORE_SECURITY);
// 获取SharedPreferences对象 SharedPreferences pref = otherAppContext.getSharedPreferences("myPref", MODE_PRIVATE);
1 . 读取数据:
String name = pref.getString("name", "defaultName"); Int age = pref.getInt("age", 0); Long time = pref.getLong("time", 0); Boolean default = pref.getBoolean("default", true);
2 . 写入数据:
// 获取SharedPreferences.Editor对象,用于存储数据修改 SharedPreferences.Editor editor = pref.edit(); // 修改数据信息 editor.putString("name", "lisi"); editor.putBoolean("isMale", true); // 提交数据修改 editor.commit();
因为SharedPreferences的数据存储格式就是一个XML文件,所以我们完全可以通过使用I/O流的方式读取该XML文件,再通过XML解析来获取数据。但是显然,这种方式是很繁琐,而是用SharedPreferences读写数据则简单很多。