3

我无法在 SQLite 和 SharedPreferences 之间进行选择。

我可以用

JSON.parse(SharedPreferences.getString("data","qweqwe");

s.putString(key,JSON.stringify(JSONObject));

或者创建一个新的大类来将我的(文本)数据存储在 SQLite 中。(PS:JSON.* 是我自己的课)

什么会更快,更好?

我知道 SharedPreferences 适用于“键值”数据,SQLite - 适用于大量结构化数据。但在我的情况下,在 SP 中存储 JSON 格式的数据并通过密钥访问会更容易。主要问题 - 它会更慢还是更快?优点和缺点?

4

3 回答 3

2

一方面,这是一个稍微主观的问题(而不是最适合stackoverflow)。另一方面,从字面上看你的问题标题,客观答案是“不,还不错”。

然而,这种推理有点主观,因为它“取决于”情况。

该类SharedPreferences实际上是存储在应用程序的私有(内部)存储中的文件的包装器/帮助器 - 据我了解,它是一个 XML 文件。基于这个事实,再次问自己......“将 JSON 格式的字符串保存在 XML 文件中是不是很糟糕”?

正如您在问题的评论中提到的那样,使用 SQLite 数据库将意味着编写额外的代码,而优点SharedPreferences是给定的首选项文件可以通过任何扩展的 Android 类的名称访问,Context包括Application,ActivityService.

于 2012-05-30T17:49:14.003 回答
2

我考虑了这一点并进行了一些练习。

因此,使用 SQLite(在我的情况下)比在 SharedPreferences 中使用 JSON 格式的字符串更好,因为我只能更新表中的一两行。使用 SharedPreferences 我必须:

  1. 采用new JSONObject(sharedPreferences.getString("json_string","qweqwe");
  2. 对对象的一些操作
  3. 编辑我的 SharedPreferences。
  4. 根据你的口味调味
  5. 将我的 JSONObject().toString() 放回 SharedPreferences。就是这样。

恕我直言,设备更复杂。因为不能调味

如果我不需要更新数据的个别部分,我宁愿使用 SharedPreferences,因为对于我不需要更新的静态数据,它更快。

于 2012-06-07T03:33:25.687 回答
1

到目前为止,我已经在几个项目中使用了这种方法,没有任何问题。但是使用 SQLite 数据库肯定有几个优点。特别是 SQLite 的版本控制/升级功能,以及强大的 SQL 查询语言。如果您需要将数据迁移到新的存储结构,SQLite 框架中的 upgrade 和 onUpgrade 回调会非常有用。

如果您保持简单,首选项中的 JSON 可以非常快速且非常容易实现。在安全性方面,首选项比数据库更“公开”,因为它们只是存储在 xml 中,但最终 SQLite 数据库的数据库文件以相同的方式存储,并且在入侵期间也可以读取。

使用 JSON/SharedPreferences 时我还没有遇到任何性能问题,但我也没有进行任何分析来测试它。我的心态一直是保持代码简单而不是过早地优化——如果出现性能问题,那就在那时进行分析工作。

最终,我会说以这种方式使用 SharedPreferences 本身并没有错。

于 2012-05-30T17:45:15.793 回答