在离线数据库中存储图像、文本注释和音频文件的方式。安卓、Java

Posted

技术标签:

【中文标题】在离线数据库中存储图像、文本注释和音频文件的方式。安卓、Java【英文标题】:Way to store images, text notes and audio files in offline database. Android, Java 【发布时间】:2021-12-10 05:37:56 【问题描述】:

我想创建一个应用程序,我可以在其中将文本、图像和音频笔记保存到 离线 数据库(无需互联网连接),然后以类似列表的布局显示它们。不想将文件直接保存到内部存储。

这是我第一次创建移动应用程序,因此我需要帮助来为此类用例选择正确的数据库。有什么建议吗?

【问题讨论】:

android 应用程序通常使用 SQlite 来完成此任务。你为什么不愿意?但是......我听说将图像存储在数据库中是一个坏主意。你为什么要这样做? 也许不是将文件存储在数据库中,而是将文件保存在设备上并存储文件的路径? 是的,没关系。 @virouz98 【参考方案1】:

首先要知道: android 中的数据库是SQLite,所以任何其他离线数据库都只是一个layer 用于管理 SQLite 数据库,它只保存数字和文本数据,但您可以通过创建 保存任何其他类型,如图像、音频、数组...等转换器 将其保存在数据库中。

例如:您可以保存BitMap-图像类型-,方法是将其转换为ByteArray-0 和 1 的列表-,然后转换 ByteArray转为String-默认文本类型-,然后就可以保存到数据库中了,当你要选择值的时候,反之即可(String->ByteArray- > BitMap),所以这里的诀窍是知道如何在类型之间进行转换。

现在答案是: 最好的离线数据库是 RoomDatabase,它是创建和管理 SQLite 数据库的最快方法,使用 Room,您无需从头开始构建 SQLite 数据库,它会为您构建它,并且具有创建转换器的好方法. 但是对于初学者来说,标准的 SQLite 已经绰绰有余了,如果你会看到 RoomDB 更难的话。

【讨论】:

SQLite 不能处理 blob? 转换器存储的图像 100% 工作,但如果您的意思是直接将 blob 插入数据库,我认为是行不通的。 在sqlite.org/faq.html 中他们说“SQLite 允许您存储 BLOB 数据”但是否直接,我不知道【参考方案2】:

我认为您可能会混淆某些术语。 虽然您可以将各种媒体放在数据库中。有时它不是最实用的解决方案。听起来您可能正在考虑文件存储,而不是数据库。 此外,这些文件必须存在于某个地方,如果不是在外部服务器/数据库上,那么它们就必须驻留在本地设备上。您的应用程序不会运行本地数据库服务,以便它可以存储媒体文件。这将是大量开销并占用大量资源。

【讨论】:

以上是关于在离线数据库中存储图像、文本注释和音频文件的方式。安卓、Java的主要内容,如果未能解决你的问题,请参考以下文章

PDF文件阅读问题仅在离线模式下快速

Chrome 在离线时禁用按钮和输入元素

android,在离线模式下保存文件(parse.com)

Firebase 存储离线功能

在离线的移动硬盘中查找文件

在离线的移动硬盘中查找文件