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

android之简单数据存储Preference

2017-04-10 18:06 309 查看
这里的持久化其实就是本地配置文件的读写,实现方法是通过Activity.getPreferences(int)获取SharedPreferences对象,然后操作配置文件的读写,值得注意的是以下几点:

1)Activity.getPreferences(int mode)等价于Content.getSharedPreferences(String filename,int mode),这里面的filename就是当前class的名称,例如在PersistentTest类中调用getPreferences(0),等价于调用getPreferences("PersistentTest", 0)。如不想用class name做文件名,可以直接调用getSharedPreferences方法,自己指定配置文件的名称。

2)mode值的定义:

MODE_PRIVATE = 0,表示当前配置文件为私有文件,只有当前的应用可以访问。

MODE_WORLD_READABLE = 1,表示当前配置文件可以被其他应用读取。

MODE_WORLD_WRITEABLE = 2,表示当前配置文件可以被其他应用写入。

如果配置文件又想被人读又想被写人,怎么办呢,呵呵,当然是MODE_WORLD_READABLE&MODE_WORLD_WRITEABLE,真的怀疑设计android的人以前是做C/C++的。

3)SharedPreferences是个很有意思的实现,读取数据的时候,直接用get方法就可以了,可是写数据的时候,没用给set方法,呵呵,第一次用这个类一定会以为只能读不能写。如果要写数据的话,需要用editor()方法(为什么不是getEditor()呢?看来设计的人一定是做C/C++的)获取SharedPreferences.Editor类,然后用这个类的put方法写文件。为什么要这样做呢?好久没有看设计模式了,不知道他采用是哪种高级模式,等以后有时间,看看它的实现再做研究吧。

4)在这个实现中,读文件是放在onResume()中,写文件是在onPause()中,为什么要这么做呢,看字面意思,好像只有恢复和暂停的时候才会被执行,那程序第一次创建的时候会读文件吗?来让我们看看Activity的生命周期,就会发现这么做的巧妙之处:



看到了吧,在Activity运行的前后,无论状态怎么转移,onResume()和onPause()一定会被执行,与其说实现的巧妙,还不如赞一下这个生命周期的设计的巧妙,这个巧妙不是说说而已,有时间的话,看看MFC中一个windows或者dialog的生命周期,你就知道这个巧妙的含义了,我们可以省多少的事情啊!所以值得记住的是,在android中想在运行前后必须要执行的语句,就应该放在onResume()和onPause()中。

实例:

@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
save();
}

@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
read();
}
private void save(){
SharedPreferences setting=this.getPreferences(Activity.MODE_PRIVATE);
setting.edit().putString("HEIGHT", height.getText().toString())
.putString("WEIGHT", weight.getText().toString())
.commit();
}

private void read(){
SharedPreferences setting=this.getPreferences(Activity.MODE_PRIVATE);
height.setText(setting.getString("HEIGHT", ""));
weight.setText(setting.getString("WEIGHT", ""));
}






大小: 60.6 KB

查看图片附件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐