【发布时间】:2019-03-20 13:23:34
【问题描述】:
最近我开始涉足 Android 开发。我做了很多基础教程并制作了几个小应用程序,但我不明白的一件事是保存和加载对象的做法。我了解外部和内部存储、共享首选项和数据库之间的区别;我只是在实现它们时感到困惑。
在我之前的一个项目中,我使用 Gson 将我的自定义对象转换为 json,并在对象创建后立即将其保存到内部存储中。然后,每次用户打开应用程序时,我都会拉出所有对象(它们都是同一个类)并将它们放入一个数组中,以便我的应用程序可以使用它们。这对我来说似乎不正确,我想知道是否有人可以告诉我这是否是一个好的做法,或者向我解释为什么它不是以及替代方案是什么。
我目前正在开发一个笔记应用程序。我有一个笔记对象,它有一个标题、正文和创建日期。我正在考虑做与上述相同的事情。当用户创建便笺时,它将转换为 json 并在内部保存。如果用户关闭应用程序并重新打开它,它将加载 json,将它们转换回对象,并将它们放入一个数组中,以便我可以显示它们并允许用户查看和编辑它们。
这是一个好习惯吗?有没有更好的方法来处理这个?
谢谢!
【问题讨论】:
-
如果你有结构化数据,你应该选择 SQLite db imo。您可以使用 Android Room 将它们映射到对象。在更大的容量中获取这样的数据会更快,并且您可以过滤特定类型等而不会影响性能。
-
@JensV 感谢您的回复。我想我会尝试使用 SQLite 数据库。至于何时保存和加载,是否建议在创建时保存并在应用加载时加载所有内容,如上所述?
-
听从@JensV 的建议。我在答案中链接了一些资源来帮助您开始。
-
@Dallas 对于小批量,这并不重要。一旦数据量增加(这对您的情况来说可能非常糟糕),您应该在显示 UI 时加载数据,并且只加载需要的内容。在创造时保存是要走的路。 (另请注意,从数据库加载不能在 UI 线程上发生。您可以查看 ViewModels 以获得处理此问题的好方法)