Android “储存”不好吗;JSON.stringify“;共享数据引用中的数据?

Android “储存”不好吗;JSON.stringify“;共享数据引用中的数据?,android,sharedpreferences,Android,Sharedpreferences,我无法在SQLite和SharedReferences之间进行选择 我可以用 JSON.parse(SharedPreferences.getString("data","qweqwe"); 及 或者创建一个新的大类来在SQLite中存储我的(文本)数据。(PS:JSON.*是我自己的类) 什么会更快更好 我知道SharedReferences用于“键值”数据,SQLite用于大量结构化数据。但在我的例子中,将JSON格式的数据存储在SP中并通过密钥访问会更容易。主要问题-是慢还是快?利与弊?

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

我可以用

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

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

什么会更快更好


我知道SharedReferences用于“键值”数据,SQLite用于大量结构化数据。但在我的例子中,将JSON格式的数据存储在SP中并通过密钥访问会更容易。主要问题-是慢还是快?利与弊?

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

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

我在使用JSON/SharedReferences时还没有遇到任何性能问题,但我也没有做任何评测来测试这一点。我的想法是保持代码简单,不要过早地进行优化——如果出现性能问题,请在此时对其进行评测


最后,我要说的是,以这种方式使用SharedReference并没有本质上的错误。

一方面,这是一个稍微主观的问题(并不是stackoverflow的最佳选择)。另一方面,从字面上看,客观的答案是“不,还不错”

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

SharedReferences
类实际上是存储在应用程序私有(内部)存储中的文件的包装器/帮助器-据我所知,它是一个XML文件。基于这一事实,再次扪心自问……“将JSON格式的字符串保存在XML文件中是否不好”


正如您在问题的开始部分中提到的,使用SQLite数据库意味着编写额外的代码,而
SharedReferences
的优点是,任何扩展
上下文
包括
应用程序
的安卓类都可以通过名称访问给定的首选项文件,
活动
服务

我对此进行了思考并进行了一些实践

因此,使用SQLite(在我的例子中)比在SharedReferences中使用JSON格式的字符串更好,因为我只能更新表中的一行和两行。对于SharedReference,我必须:

  • 使用新的JSONObject(SharedReferences.getString(“json_字符串”、“qweqwe”);
  • 对对象的一些操作
  • 编辑我的共享引用
  • 适合你口味的调味品
  • 将我的JSONObject().toString()放回SharedReferences。就这样
  • 嗯,这个设备比较复杂,因为它不能调味


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

    期待社区在这方面的意见,因为我有同样的问题。@dotty我的理由。关于SQLite:我需要创建新的类,我从URL和SQLite我需要编写两倍的代码来使用这些数据。关于SharedReferences:我从URL加载数据,s.putString不需要任何操作,在这里我使用JSON.parse,我只需要:JSON.parse(s.getString(“jsdata”,“qweqwe”).equals(“qweqwe”)?JSON.get(URL):s.getString(“jsdata”,“qweqweqwe”))还有一些用这些数据更新/操作的函数。在desc中,我写了更多客观的问题:)例如,什么更快?@anony_root:恐怕我没有任何更快的基准,而且,这仍然有点主观,需要进行适当的测试。以任何一种方式保存一个短JSON字符串都可能只差几毫秒。保存数百(或数千)个长字符串可能需要明显不同的时间。如果您有简单的需求,那么
    SharedReferences
    可能是一种方法,因为该功能内置于所有基于
    上下文的类中。
    
    s.putString(key,JSON.stringify(JSONObject));