如何处理Android / SQlite层次结构中的图像关联?

时间:2016-04-07 14:17:01

标签: android sqlite android-camera

我的问题很难解释。在我的应用程序中,有一个我自己制作的自定义对象。在此对象中,是日期时间戳。在该对象中还有用户可以使用相机硬件拍摄的几张照片(或照片的参考?)。因此,我需要能够存储多张图片以及此共享时间戳。

我的问题是这些信息如何存储在SQLite数据库中,因为我希望这些信息能够持久存在。我不认为将实际图像存储在数据库中是一个好主意,但我不知道你要存储什么样的引用。您是否只将数据路径存储在数据库中的文件系统上?你真的存储什么?如果有人决定将数据保存到SD卡而不是内部存储等,会怎么样?这种事情的典型处理方式是什么/ Android / SQlite内置了哪些东西来处理这种情况?

3 个答案:

答案 0 :(得分:1)

将图像保存到手机记忆库或SD卡中,并仅保存sqlite数据库的路径。这比存储图像好得多。

答案 1 :(得分:1)

对于我的应用程序(Memorix Notes& Checklists,如果你必须知道),我将图像本身保存到文件系统的app-private部分,并将文件路径作为字符串保存在数据库中。

当用户删除或重命名文件时,将图像保存在公共文件系统中很容易使数据库不一致。

如果您需要许多图像,请注意每个目录允许的文件数量有限制。在我的应用程序中,我确保文件夹中的图像不超过1000张,然后启动一个新文件夹。

至于您提到的关联 - 如果您只需要时间戳,请添加一个'时间戳'字段到您的图像表。如果你需要一个' master'之间的实际1:n关系。对象和相关图像,创建一个' master'桌子和图像' table,并在image-table中有一个引用主表的外键字段。

答案 2 :(得分:1)

您应该将图像的路径保存到sqlite数据库中。如果您希望图像位于内部存储或外部存储中,则由您决定。取决于您的需求。内部存储将始终可用,并且仅对您的应用程序是私有的,因此用户将无法删除照片,您可以取消不必要的例外。 Visit this link to get an idea on storage options.

您还希望针对唯一键(即时间戳)保存这些路径,以便稍后根据您存储的时间戳查询这些图像。时间戳始终是唯一的,因此您应该将其作为主键。

您可以使用任何库或您自己的实现来将这些图像延迟加载到您的UI线程。This SO thread has good ideas if you're thinking of rolling your own lazy loading.