【问题标题】:Question about saving and loading objects in Android关于在Android中保存和加载对象的问题
【发布时间】:2019-03-20 13:23:34
【问题描述】:

最近我开始涉足 Android 开发。我做了很多基础教程并制作了几个小应用程序,但我不明白的一件事是保存和加载对象的做法。我了解外部和内部存储、共享首选项和数据库之间的区别;我只是在实现它们时感到困惑。

在我之前的一个项目中,我使用 Gson 将我的自定义对象转换为 json,并在对象创建后立即将其保存到内部存储中。然后,每次用户打开应用程序时,我都会拉出所有对象(它们都是同一个类)并将它们放入一个数组中,以便我的应用程序可以使用它们。这对我来说似乎不正确,我想知道是否有人可以告诉我这是否是一个好的做法,或者向我解释为什么它不是以及替代方案是什么。

我目前正在开发一个笔记应用程序。我有一个笔记对象,它有一个标题、正文和创建日期。我正在考虑做与上述相同的事情。当用户创建便笺时,它将转换为 json 并在内部保存。如果用户关闭应用程序并重新打开它,它将加载 json,将它们转换回对象,并将它们放入一个数组中,以便我可以显示它们并允许用户查看和编辑它们。

这是一个好习惯吗?有没有更好的方法来处理这个?

谢谢!

【问题讨论】:

  • 如果你有结构化数据,你应该选择 SQLite db imo。您可以使用 Android Room 将它们映射到对象。在更大的容量中获取这样的数据会更快,并且您可以过滤特定类型等而不会影响性能。
  • @JensV 感谢您的回复。我想我会尝试使用 SQLite 数据库。至于何时保存和加载,是否建议在创建时保存并在应用加载时加载所有内容,如上所述?
  • 听从@JensV 的建议。我在答案中链接了一些资源来帮助您开始。
  • @Dallas 对于小批量,这并不重要。一旦数据量增加(这对您的情况来说可能非常糟糕),您应该在显示 UI 时加载数据,并且只加载需要的内容。在创造时保存是要走的路。 (另请注意,从数据库加载不能在 UI 线程上发生。您可以查看 ViewModels 以获得处理此问题的好方法)

标签: android gson


【解决方案1】:

您应该将数据保存到设备上的 SQLite 数据库中,而不是 JSON。查看 Room Persistence Library 以更顺畅地在 SQLite 中保存对象。

Room Persistence Library Documentation

Google Android Developer Video on Youtube.

您可以按照链接的示例、示例和Google Codelab 快速学习。这很容易。

或者,您可以采用不那么推荐的方式直接使用 SQLite - 阅读here

【讨论】:

    【解决方案2】:

    没必要,为什么不简单地使用 SQLite 数据库。为什么要将它们保存为 JSON?

    【讨论】:

    • 感谢您的回复。我只是假设这是最简单的方法,因为我不打算一次拥有超过 20 个音符。我将改用数据库。至于何时保存和加载,我描述的方式听起来正确吗?节省创建、加载和应用加载?
    猜你喜欢
    • 1970-01-01
    • 2011-05-12
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    相关资源
    最近更新 更多