在SharedPreferences中存储“JSON.stringify”数据是不是很糟糕?

时间:2012-05-30 16:04:12

标签: android sharedpreferences

我不能在SQLite和SharedPreferences之间做出选择。

我可以用

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

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

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

什么会更快,更好?

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

3 个答案:

答案 0 :(得分:2)

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

然而,推理是略微主观的,因为它“取决于”情况。

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

正如你在问题中提到的那样,使用SQLite数据库将意味着编写额外的代码,而SharedPreferences的优点是任何Android类都可以通过名称访问给定的首选项文件{{1包括ContextApplicationActivity

答案 1 :(得分:2)

我想到了这一点并做了一些练习。

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

  1. 使用new JSONObject(sharedPreferences.getString("json_string","qweqwe");
  2. 使用对象进行一些操作
  3. 编辑我的SharedPreferences。
  4. 根据您的口味调味
  5. 将我的JSONObject()。toString()放回SharedPreferences。这就是全部。
  6. 恕我直言,这对设备来说更复杂。 因为它无法调味

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

答案 2 :(得分:1)

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

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

我还没有使用JSON / SharedPreferences的任何性能问题,但我还没有进行任何分析来测试它。我的思维方式是保持代码简单而不是过早优化 - 如果出现性能问题,那么在那时进行分析工作。

最后,我要说以这种方式使用SharedPreferences没有任何内在错误。