Android数据存储机制
数据是应用的核心。下面我们来详细看看Android系统的数据存储和共享机制。
Android为我们提供了4种数据存储方式,但由于存储的这些数据都是某个应用程序私有的,所以它又为我们提供了一种在不同应用程序之间共享数据的机制,即ContentProvider。
下面我们首先将分别介绍Android的4种数据存储方式:Shared Preferences、Files、SQLite、NetWork,最后我们将详细介绍Android的Content Provider机制。
一、Android数据存储之SharedProviences
它是Android提供的用来存储一些简单配置信息的一种机制,例如:登录用户的用户名与密码。其采用了Map数据结构来存储数据,以键值对的方式存储,可以简单的读取与写入,具体实例如下:
[java] //读取SharedPreference
void readSharedPreferences()
{
String strName,strPassword;
SharedPreferences user = getSharedPreferences(“user_info”,0);
strName = user.getString(“NAME”,””);
strPassword = user getString(“PASSWORD”,””);
}
//往SharedPreference中写入内容
void writeSharedPreferences(String strName,String strPassword)
{
SharedPreferences user = getSharedPreferences(“user_info”,0);
//使其处于编辑状态
uer.edit();
user.putString(“NAME”, strName);
user.putString(“PASSWORD” ,strPassword);
user.commit();
}
//读取SharedPreference
void readSharedPreferences()
{
String strName,strPassword;
SharedPreferences user = getSharedPreferences(“user_info”,0);
strName = user.getString(“NAME”,””);
strPassword = user getString(“PASSWORD”,””);
}
//往SharedPreference中写入内容
void writeSharedPreferences(String strName,String strPassword)
{
SharedPreferences user = getSharedPreferences(“user_info”,0);
//使其处于编辑状态
uer.edit();
user.putString(“NAME”, strName);
user.putString(“PASSWORD” ,strPassword);
user.commit();
}数据读取与写入的方法都非常简单,只是在写入的时候有些区别:先调用edit()使其处于编辑状态,然后才能修改数据,最后使用commit()提交修改的数据。实际上SharedPreferences是采用了XML格式将数据存储到设备中,在DDMS中的File Explorer中的/data/data/<package name>/shares_prefs下。以上面的数据存储结果为例,打开后可以看到一个user_info.xml的文件,打开后可以看到:
[java] <?xml version=”1.0″ encoding=”UTF-8″?>
<map>
<string name=”NAME”>moandroid</string>
<string name=” PASSWORD”>SharedPreferences</string>
</map>
<?xml version=”1.0″ encoding=”UTF-8″?>
<map>
<string name=”NAME”>moandroid</string>
<string name=” PASSWORD”>SharedPreferences</string>
</map>使用SharedPreferences是有些限制的:只能在同一个包内使用,不能在不同的包之间使用
二、Android数据存储之Files(文件)
文件方式是一种较常用的存储方法,在Android中读/写文件的方法,与Java中实现I/O的程序是完全一样的,Android为我们提供了openFileInput()和openFileOutput()方法来读取设备上的文件。具体示例如下:
[java] //读文件
private void read() {
try {
FileInputStream inputStream = this.openFileInput("music.cfg");
byte[] bytes = new byte[1024];
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
while (inputStream.read(bytes) != -1) {
arrayOutputStream.write(bytes, 0, bytes.length);
}
inputStream.close();
arrayOutputStream.close();
mbMusic = Boolean.getBoolean(new String(arrayOutputStream.toByteArray()));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//写文件
private void writeFile() {
try {
/** 根据用户提供的文件名,以及文件的应用模式,打开一个输出流
* openFileOutput(String name, int mode);
* 第一个参数,代表文件名称,注意这里的文件名称不能包括任何的/或者/这种分隔符,只能是文件名
* 该文件会被保存在/data/data/应用名称/files/music.cfg
* 第二个参数,代表文件的操作模式
* MODE_PRIVATE 私有(只能创建它的应用访问) 重复写入时会文件覆盖
* MODE_APPEND 私有 重复写入时会在文件的末尾进行追加,而不是覆盖掉原来的文件
* MODE_WORLD_READABLE 公用 可读
* MODE_WORLD_WRITEABLE 公用 可读写
*
*/
FileOutputStream outputStream = openFileOutput("music.cfg",
Activity.MODE_PRIVATE);
outputStream.write(String.valueOf(mbMusic).getBytes());
outputStream.flush();
outputStream.close();
&n
补充:移动开发 , Android ,