2

对于允许我的组织成员在他们的移动设备上查看数据的应用程序,我需要在设备上存储预先格式化的数据,以便他们也可以离线查看。他们如何获取数据是通过 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"
        }]
}]

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

可以在 SharedPreferences 中保存 JSON 数组吗?

如何在 SharedPreferences 中保存 JSON 数组?

Android:在 android 中为应用程序离线存储 JSON 数据的最佳方式是什么?

Android - 如何将 JSON 对象添加到 sharedPreferences?

使用 SQLite 而不是 File 有什么优势?

通过阅读这些,我了解到 SharedPreference 文件比 sqlite 文件“更快”,但容易损坏。SQLite 是一个数据库,由于数据来自一个数据库,因此我倾向于以牺牲处理速度为代价来使用它。

现在我只需要存储然后读取数据,除非“主服务器”上有更新,否则它不会发生变异,在这种情况下,我可能会擦除本地数据并重新填充它。在这些线程中,我读到将 JSON 存储在 sharedpreference 中很容易但难以阅读。

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

任何意见是极大的赞赏!

4

4 回答 4

1

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

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

于 2017-04-14T14:21:21.933 回答
1

您可以尝试使用 Realm 或 SugarORM 等 ORM,并将 json 对象存储在数据库中。他们还提供了密码选项,您也可以通过这些选项加密数据,这将更加灵活。

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 keystore 密钥对 JSON 字符串进行加密,然后可以将加密后的字符串存储在普通的 sqlite 中。

于 2017-04-14T13:09:11.867 回答
0

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

Shared Preferences 非常方便存储小的键值对,如果您想要保存的键值集合相对较少,您应该使用 SharedPreferences API。SharedPreferences 对象指向一个包含键值对的文件,并提供简单的方法来读取和写入它们。您仍然会在这里使用 gson,我从未听说过共享偏好被破坏,我所知道的是它们很脆弱,并且与您的应用程序安装一起存在。

结论:如果你的数据集很大,使用数据库的方法来持久化大数据集,这里的维护和修改更流畅,但是如果你知道你存储的内容相对较小,使用共享首选项,并在 android 中操作 json 构造以来回使用谷歌 gson 库。

于 2017-04-14T13:19:21.450 回答
0

共享偏好:

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

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

将 Json 转换为 String :

Gson gson = 新 Gson();

String jsonString = gson.toJson(jsonData);

将字符串转换为 Json :

gson.fromJson(jsonString, TypeToConvert);

Sqlite 数据库:

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

于 2017-04-14T13:59:04.720 回答