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



我的问题很难解释。在我的应用程序中,有一个我创建的自定义对象。在此对象中,是一个日期时间戳。在这个对象中还有一些照片(或照片参考?),用户可以用相机硬件拍摄。所以我需要能够存储几个图片和这个共享的时间戳。

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

您应该将映像的路径保存到sqlite数据库中。这取决于您是否希望图像存储在内部存储器或外部存储器中。这取决于你的需要。内部存储将始终可用,并且仅对您的应用程序是私有的,因此用户将无法删除照片,您可以取消不必要的例外情况。访问此链接了解存储选项。

您还需要根据一个唯一的密钥(即时间戳)保存这些路径,以便以后可以根据存储的时间戳查询这些图像。时间戳总是唯一的,所以你应该把它作为你的主键。

您可以使用任何库或自己的实现将这些图像延迟加载到UI线程中。如果你想滚动自己的懒惰加载,这个SO线程有很好的想法。

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

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

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

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

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

最新更新