===============================================
最后一个 : 节选如下 完整在附件
===============================================
6 使用Preference首选项
Android有几种不同的方式来在你的Activity中存放数据。最简单的就是使用preferences首选项系统。
Android允许Activity和应用程序保存首选项。首选项的内容主要是一些键值对(keys,values),类似于Map。就像首选项的名字一样,一般在用户保存自定义配置信息的时候才用到首选项。比如订阅了RSS,可以把你订阅的信息保存在首选项中。当然,你可以保存任何你想保存的数据,只要你输入了一个String类型的key和一个基本类型的值就可以了~
首选项既可以被一个Activity访问,也可以共享给应用程序中包含的所有Activity。有时候,首选项也可以在应用程序之间进行共享,但是当该首选项文件处于“写入”的时候,是不允许访问的。
得到你想要的
要想访问首选项文件,你需要调用如下方法:
l getPreferences()
这个方法属于Activity自带的类。可以在所在的活动类中,调用。
l getSharedPreferences()
在你的Activity内部调用这个方法,或者调用其他的应用程序的。
这个方法属于Context类。接受两个参数,第一参数是name,
name | Desired preferences file. If a preferences file by this name does not exist, it will be created when you retrieve an editor (SharedPreferences.edit()) and then commit changes (Editor.commit()). |
表示要获取的首选项文件的名字。如果这个文件不存在,当你通过(SharedPreferences.edit())方法获取一个编辑器,并进行提交后那么就会自动创建一个空的首选项文件
两个方法都可以接受一个用于表示安全模式的参数,一般是int类型的值。我们默认使用0
· MODE_PRIVATE : 0
· MODE_WORLD_READABLE : 1
· MODE_WORLD_WRITEABLE : 2
两个方法都会翻一个SharedPreferences实例,这个实例提供了一套getter方法,用于访问各种指定名字的选项。如果key没有对应的值,则会返回默认值。
SharedPreference
设置你的首选项
在你得到一个SharedPreference对像以后,你可以使用它的edit()方法,获得一个编辑器,这个编辑器可以编辑首选项。
Editor提供了一些编辑方法
其中,
Remove()方法,删除某一个首选项配置
Clear()方法,清空所有配置
Commit(),这个方法很重要,当你对SharedPreferences进行了操作后,一定要Commit,才可以保存下来
下面,我们呢通过一个例子来看下,首选项的使用
首先是布局:
有一个checkbox和一个按钮
Java代码:
点击选项后,再点击close,退出Activity。
再重新启动,会看到checkbox已经被选中了
重点是看OnPause()和OnResume()方法。
当你选择close的时候,会让Activity进入onPause(),onStop()甚至onDestroy()方法直到彻底关闭。在这个阶段,会吧做出的选择都保存在首选项中
然后,当重启的时候,会进入onRusme()方法。会读取首选项中的内容。
17 访问文件Files
虽然Android提供了结构化的存储方式:首选项和数据库。但是有时候,使用File来保存,也是一种简单而有效的方式。Android提供了两种访问文件的模式:程序内部的文件,本机硬件里的文件。
开始吧!
假如,在你的程序里有一个静态文件,里面保存了一些单词。最简单的方式是把这个文件放到res/raw目录中,这样的话,当你的程序被打包成apk的时候,就会也把raw下的文件放在apk里。
如果你想访问这个文件,你就需要为你自己准备一个Resources对象。对于Activity来说,得到这个对象很简单,只要调用 getResources()方法即可。Resources对象提供了openRawResource()方法,来得到某一个你要打开的文件的输入流 InputStream。需要注意的是,openRawResource()方法,希望得到的参数不是一个path,而是一个ID。就像findViewById()一样。比如,如果你在res/raw 中放了一个 words.xml文件,那么你可以用
R.raw.words来作为标识符传递给openRawResource()方法
但是,你只能得到一个InputStream,所以你就没有办法修改这个文件了。因此,这个方法也就是只对访问静态数据有用。
下面,我们通过一个例子来看下: