SharedPreference小结

来源:互联网 发布:佛山新能源汽车知豆 编辑:程序博客网 时间:2024/06/03 22:52

SharedPreference是Android中最简单的存储方式(当然安全性不高)。
以键值方式存储,每个KEY对应一个VALUE。

(一)SharedPreference的存在形式

SharedPreference以XML文件的形式存在。
存储目录为:data/data/APP Package Name/shared_prefs/
若文件存在,则使用,若不存在,则创建。

这里写图片描述

my.xml内容如下

<?xml version='1.0' encoding='utf-8' standalone='yes' ?><map>    <string name="name">BBB</string></map>

MainActivity.xml内容如下

<?xml version='1.0' encoding='utf-8' standalone='yes' ?><map>    <int name="age" value="17" /></map>

com.breakloop.sharedperferencedemo_preferences.xml内容如下

<?xml version='1.0' encoding='utf-8' standalone='yes' ?><map>    <boolean name="married" value="true" /></map>

注:当然,以上内容必须在ROOT下,才能看到。

(二)获取SharedPreference对象

有三种方式可以获取SharedPreference对象。
(1)从context中获取

getSharedPreferences(fileName, mode

在默认目录下,创建名为fileName的XML文件,存储数据,文件操作模式为mode。

注:fileName不带后缀,android会自动使用.xml作为后缀。

(2)从Activity中获取

getPreferences(mode);

在默认目录下,创建以当前Activity为文件名的XML文件,存储数据,文件操作模式为mode。

(3)通过PreferenceManager的静态方法获取。

PreferenceManager.getDefaultSharedPreferences(this);

在默认目录下,创建以APP Package为文件名的XML文件,存储数据。文件操作模式为Context.MODE_PRIVATE。

注:由于Activity跟Context可相互转换,因此前两个方法可用直接在Activity中调用

(三)SharedPreference的操作模式

SharedPreference有五种操作模式,但只有一种有效,一种无意义,其他三种已被放弃。
(1)Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容。
(2)Context.MODE_APPEND:为追加模式,在文件后添加数据。这对于SharedPreference无意义。因为SharedPreference与Map类似,一KEY一Value。若Key存在,则更新,不存在则添加。从这种方式上看,作用跟Context.MODE_PRIVATE雷同。
(3)Context.MODE_MULTI_PROCESS:表示当前文件可以被多进程同时操作,已在Android6.0中被放弃。
(4)Context.MODE_WORLD_READABLE:表示当前文件可以被其他应用读取,已在Android4.2中被放弃。
(5)Context.MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用修改,已在Android4.2中被放弃。

(四)如何向SharedPreference中存储数据

通过SharedPreferences.Editor对象向SharedPreference中存储数据。
可通过SharedPreference对象的editor()方法,获取SharedPreferences.Editor对象。

SharedPreferences m_SP1=getSharedPreferences("my", Context.MODE_APPEND);SharedPreferences m_SP2=getPreferences(Context.MODE_PRIVATE);SharedPreferences m_SP3=PreferenceManager.getDefaultSharedPreferences(this);SharedPreferences.Editor editor1=m_SP1.edit();SharedPreferences.Editor editor2=m_SP2.edit();SharedPreferences.Editor editor3=m_SP3.edit();

可以将SharedPreferences.Editor对象看做Map来使用。

这里写图片描述

但需要指出的是,在put数据后,需要调用apply()或commit(),来完成更新。
要么

SharedPreferences.Editor editor1=m_SP1.edit();editor1.putString("name","AAA");editor1.putString("name","BBB");editor1.apply();

要么

m_SP1.edit().putString("name","AAA").apply();m_SP1.edit().putString("name","BBB").apply();

决不能

m_SP1.edit().putString("name","AAA");m_SP1.edit().putString("name","BBB");m_SP1.edit().apply();

注:commit()与apply()的区别。前者将数据同步写入磁盘,并返回boolean型结果,表示是否成功,速度慢,保证精确度。后者将数据写入内容,而后异步写入磁盘,无返回结果,完成速度快,但不保证文件中的数据为操作写入数据。

(五)如何从SharedPreference中获取数据

获取数据时,直接使用SharedPreference对象即可,操作与Map相同。

这里写图片描述

以上是对SharedPreference的小结。SharedPreference可用于存储属性配置,session id,登录信息等。但明文的存在形式,使其安全性不高。且SharedPreference使用时被整体读入内存,若使用加密对数据进行保护,将大大降低其性能。因此,不建议使用SharedPreference存储敏感信息。