在android上存储JSON:sqlite与SharedPreference

时间:2017-04-14 12:58:35

标签: android json sqlite sharedpreferences android-storage

对于允许我的组织成员在其移动设备上查看数据的应用程序,我需要在设备上存储预先格式化的数据,以便他们也可以离线查看。他们如何获取数据是通过JSON请求响应。

响应格式如下(匿名ofc):

[{
    "firstname":"John",
    "lastname":"Smith",
    "group":"1",
    "age":11,
    "installed":"Ja",
    "medical":"Is aan zijn linker zijde verlamd geweest.",
    "notes":"Heimee. \r\nBeschermend opgevoed. \r\nTerug getrokken persoonlijkheid.",
    "Insignes":["test", "Test2"],
    "Parents":[]
},
{
    "firstname":"Emely",
    "lastname":"Watson",
    "group":"33",
    "age":14,
    "installed":"Ja",
    "medical":"",
    "notes":"Test",
    "Insignes":["Veilig & Gezond I","CWO II","CWO III","Kampeertechnieken & Pionieren"],
    "Parents":[
        {
            "name":"ouder ouder",
            "address":"op | 0000AA Amsterdam",
            "phone1":"",
            "phone2":"0612345678",
            "mail":"example@google.com"
        }]
}]

我已经阅读了一些关于如何最好地存储它的讨论:

Is it ok to save a JSON array in SharedPreferences?

How to save JSON Array in SharedPreferences?

Android: what is the best way to store JSON data offline for the app in android?

Android - how to add JSON object to sharedPreferences?

What is the advantage of Using SQLite rather than File?

通过阅读这些,我收集到了SharedPreference文件更快"比sqlite但容易腐败。 SQLite是一个数据库,因为数据来自一个我倾向于以处理速度为代价使用它。

现在我只需要存储然后读取数据,除非主服务器"上有更新,否则它不会被改变。在这种情况下,我可能会擦除本地数据并重新填充它。在这些线程中,我已经读过将JSON存储在共享首选项中很容易但很难阅读。

但是在阅读了这些(以及更多)讨论之后,我更接近于了解/决定存储我的json的最佳方式是什么。

非常感谢任何建议!

4 个答案:

答案 0 :(得分:1)

您可以尝试像Realm或sugarORM这样的ORM,并将json has对象存储在数据库中。它们还提供了密码选项,您可以通过它们加密数据,这将更加灵活。

http://www.androidauthority.com/use-android-keystore-store-passwords-sensitive-information-623779/

http://www.androidhive.info/2016/05/android-working-with-realm-database-replacing-sqlite-core-data/

如果您不需要第三方使用任何ORM,那么您可以使用android密钥库密钥直接加密JSON字符串,然后将加密的字符串存储在正常的sqlite中。

答案 1 :(得分:0)

最好的选择是使用数据库方法,因为它听起来你的数据集可能很大而且预计会很大。数据库保留了大量的信息,但是我不建议使用SQLITE,因为它是基于sql的,没有ORM,操作可能会变得乏味和耗时,而且主要是它很慢(有争议)。而是使用最热门和最新的no-sql数据库用于android和ios,其中Realm,realm超快,它基于java注释和ORM(如hibernate)。要在android中使用json,我建议您熟悉GSON,这是一个可以将Java对象转换为JSON并返回的Java序列化/反序列化库。

共享优先级对于存储小键值对非常方便。如果您要保存的键值集合相对较少,则应使用SharedPreferences API。 SharedPreferences对象指向包含键值对的文件,并提供读取和写入它们的简单方法。你仍然可以在这里使用gson,我从来没有听说过共享的偏好被破坏,我知道它们是脆弱的,并且存在你的应用程序安装。

  

结论:如果您的数据集很大,请使用数据库方法来保存大型数据集,维护和修改在这里更流畅,但是如果您知道存储的内容相对较小,请使用共享的pref,并操纵json构造在android中来回使用google gson库。

答案 2 :(得分:0)

SharedPreferences:

如果您在Json中拥有少量数据,则必须将其存储在SharedPreferences中。

您可以使用Gson轻松地将Json存储到SharedPreferences。只是用这个:

将Json转换为字符串:

Gson gson = new Gson();

String jsonString = gson.toJson(jsonData);

将字符串转换为Json:

gson.fromJson(jsonString, TypeToConvert);

Sqlite数据库:

如果您在Json中拥有大量数据,那么只需使用Sqlite

答案 3 :(得分:0)

这是基于意见的答案。 Android不,我不会将JSON存储在数据库或首选项中。将json存储在一个文件中。可以像流访问json一样以流的形式访问文件。实际上文件中的大小没有上限。我可能会在数据库或首选项中存储指向json文件的链接。根据应用程序的不同,我可能只是将json提取为抽象元素并存储在DB中以进行排序选择。

您提供的数据取决于我将提取并插入到设备的联系人数据库中的敏感度。