您的位置:首页 > 移动开发 > Android开发

Android两种最简单的数据存储:Shared Preferences和Files存储

2012-01-07 14:51 351 查看
I、数据存储之Shared Preferences:

很多时候我们开发的软件需要向用户提供软件参数设置功能,Android应用,我们最适合采用什么方式保存软件配置参数呢?在Android平台上,提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数。使用SharedPreferences保存数据,其背后是用xml文件存放数据,使用简易的键值对存储。文件存地方在在/data/data/<packagename>/shared_prefs目录下。下面我们给点代码,说下简单的使用:

public final static String FileName = "Login";public void save() {
try {
// 取得活动的SharedPreferences对象,设置其属性是其他程序也可以读
SharedPreferences uiState = getSharedPreferences(FileName,
Context.MODE_WORLD_READABLE);
// 取得编辑对象
SharedPreferences.Editor editor = uiState.edit();
// 添加值
editor.putBoolean("m_CheckBox_Save_Check", false); // 是否自动保存密码
editor.putBoolean("m_CheckBox_AutoLogin_Check",
true); // 是否自动登陆
editor.putString("leiXing", "学生");
editor.putString("zhangHao", "123456");
editor.putString("miMa", "0");
// 提交保存
editor.commit();
Log.v("Login save", "登陆信息保存成功");

} catch (Exception e) {
Toast.makeText(Login.this, "保存信息失败!", Toast.LENGTH_SHORT).show();
return;
}
return;
}


这样,我们就把信息存储到了/data/data/<packagename>/shared_prefs/Login.xml文件里面,现在你打开这个文件,就可以看到内容已经被存储。如下:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="miMa">0</string>
<string name="zhangHao">123456</string>
<boolean name="m_CheckBox_Save_Check" value="true" />
<boolean name="m_CheckBox_AutoLogin_Check" value="false" />
<string name="leiXing">学生</string>
</map>


getSharedPreferences(name,mode)方法的第一个参数用于指定该文件的名称,最好定义为一个静态字符串,另外,名称如上面所示,不用带后缀名,后缀名会由系统自动加上。方法的第二个参数指定文件的操作模式,共有四种操作模式,这四种模式想必大家都有一定的了解。如果不大清楚的同学请自行查看API。

另外Activity还提供了另一个getPreferences(mode)方法操作SharedPreferences,这个方法默认使用当前类不带包名的类名作为文件的名称。

如果你保存成功了,并且在对应目录下找到了Login.xml文件,打开发现有数据。下面我们来说说打开文件读取数据。如果是在同一个项目程序中(不同的Activity没有关系),我们可以直接打开这个文件读取使用里面的数据,打开代码如下:

SharedPreferences sharedPreferences = getSharedPreferences(
FileName, Context.MODE_WORLD_READABLE);
// getString()第二个参数为缺省值,如果preference中不存在该key,将返回缺省值
m_CheckBox_Save_Check = sharedPreferences.getBoolean(
"m_CheckBox_Save_Check", false);
m_CheckBox_AutoLogin_Check = sharedPreferences.getBoolean(
"m_CheckBox_AutoLogin_Check", false);
LeiXing = sharedPreferences.getString("LeiXing", "学生");
zhangHao = sharedPreferences.getString("zhangHao", "");
miMa = sharedPreferences.getString("miMa", "");


  

2.如果你是在别的一个项目中需要调用到这个项目中的文件。你需要通过createPackageContext方法取到这个项目的Context。并且用这个Context取到文件。

II、数据存储之:Files

基础使用请参考:http://user.qzone.qq.com/997300235/blog/1315365981

这里我只说明,其实Files存储的一个Files可以存储多个变量,那么如何使用呢。具体看代码实例:

public void save() {
Properties properties = new Properties();
properties.put("theme_value", "0");
properties.put("size_value1", "1");
properties.put("size_value2", "2");
properties.put("size_value3", "3");
try {
FileOutputStream Stream_theme = this.openFileOutput(
"theme_save.cfg", Context.MODE_WORLD_WRITEABLE);
properties.store(Stream_theme, "");

} catch (FileNotFoundException e) {
return;
} catch (IOException e) {
return;
}
}


  

对应读取为:

void load() {
Properties properties = new Properties();
try {
FileInputStream Stream_theme = this.openFileInput("theme_save.cfg");
properties.load(Stream_theme);
} catch (FileNotFoundException e) {
return;
} catch (IOException e) {
return;
}
Log.v("ActivityParent", properties.get("theme_value").toString());
theme_int = Integer.parseInt(properties.get("theme_value").toString());
size[0] = (float) Double.parseDouble(properties.get("size_value1")
.toString());
size[1] = (float) Double.parseDouble(properties.get("size_value2")
.toString());
size[2] = (float) Double.parseDouble(properties.get("size_value3")
.toString());
}


  

PS:1.参考网站信息:

http://blog.csdn.net/aomandeshangxiao/article/details/6830481

http://user.qzone.qq.com/997300235/blog/1315362274

http://user.qzone.qq.com/997300235/blog/1315365981

2.方便以后再次碰到使用

  

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: