Android数据持久化之SharedPreference

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android数据持久化之SharedPreference相关的知识,希望对你有一定的参考价值。

参考技术A SharedPreference是android上一种非常易用的轻量级存储方式,只能存放Boolean,Float,Int,Long,String 五种类型,数据存储在Android系统的 /data/data/应用包名/shared_prefs 目录下的.xml文件,用户应用程序一旦卸载,存在应用数据目录下的shared_prefs文件也会被删除。

1.创建SharedPreference,如果存在目标文件,则打开并加载到内存以map格式存在,否则创建。有三种方式可以来获取:

创建的xml文件名字就是name.xml,也就是说不同的name会生成不同的.xml文件。

创建的文件名字为:应用包名_preferences.xml

2.存放数据,异步提交;读取数据

我们来看一下存储的文件内容

以上就是SharedPreference最基本也是常见的使用。一般使用SharedPreference不会出现什么问题,但是还是需要几点注意的地方。

2.尽量避免重复getSharedPreferences同一个名称的.xml(也就是同一个文件),毕竟读取文件的过程还是有一定的资源花费。

3.不要put一个就apply或者commit一次,apply和commit是将保存在map容器中的数据写入.xml中,IO操作还是会耗费一定的资源的。

SharedPreference中还有像xml文件数据在内存中的map容器,备份文件等概念,这里不再一一细说,很多分析原理的文章,下面列出几篇。

相关文章:
SharedPreference 源码分析
谈一谈SharedPreference的一些使用误区
Android之不要滥用SharedPreferences(上)
Android 之不要滥用 SharedPreferences(下)

从输入用户保存名称和网站的持久数据

【中文标题】从输入用户保存名称和网站的持久数据【英文标题】:Persistent data to save name and website from input user 【发布时间】:2013-03-23 19:31:04 【问题描述】:

我有两个编辑文本的名称和网址。 按“保存”按钮后,我想保存这些信息。

所以我决定使用 SharedPreferences 来存储它,没关系。

SharedPreferences addActivityPrefs = getPreferences(MODE_PRIVATE);SharedPreferences.Editor editor = addActivityPrefs.edit(); editor.putString("name", name.getText().toString()).commit(); editor.putString("url", url.getText().toString()).commit();

但我的问题是,当我想存储其他值时,它会覆盖我以前的值 我想保留所有这些。

这是我的 xml 文件:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
     <string name="url">http://Google.co.uk</string>
     <string name="name">BBC world news feed</string>
</map>

我的目标是保存多对 name-url 之类的 http://www.google.co.uk 谷歌

<map>
    <string name="url">http://www.yahoo.co.uk</string>
    <string name="name">YAhoo</string>
</map>

等等等等。

【问题讨论】:

你为什么不用 sqlite 表呢? 因为我有一些要求要遵循.. 【参考方案1】:

您可以将数组存储为字符串并保存,或者您可以为每个项目创建一个新键,所以有

    位置1 位置2 位置3

要做第二种方法,你可以看看这个问题:

Android store array in preferences

我也有一个保存项目数量的键,所以你可以加载那个键,递增,保存,然后使用新的计数器作为新键的名称,所以location + cntr

【讨论】:

【参考方案2】:

您可以使用 url 和 name 创建 json 对象并将它们放入一个 jsonArray 中,您可以将其作为字符串提交,或者创建您的对象来存储名称和 url,将其放入列表中,然后只需序列化/反序列化列表和把它放在首选项中。

PS:在您输入两个/所有值后仅调用一次 commit,最好不要从 UI 线程调用一次,或者只调用一次 apply()。

【讨论】:

以上是关于Android数据持久化之SharedPreference的主要内容,如果未能解决你的问题,请参考以下文章

Android--数据持久化之内部存储Sdcard存储

Android开发之数据持久化存储三

Android学习之基础知识九 — 数据存储(持久化技术)之使用LitePal操作数据库

Android学习之基础知识九 — 数据存储(持久化技术)之SQLite数据库存储

Android Studio 之 SharedPrefences 数据持久性保存

Android PreferenceScreen