【问题标题】:Why can't we read an sqlite file from /raw or /assets?为什么我们不能从 /raw 或 /assets 读取 sqlite 文件?
【发布时间】:2012-06-17 07:55:06
【问题描述】:

我有一个要与我的应用程序一起分发的 sqlite 数据库。大约3mb。如果我理解正确,如果它位于我的应用程序的 /raw 或 /assets 文件夹中,我无法直接打开它,对吗?我们需要先将其直接复制出来,如下所示:

Get the SQLite path within the Assets Folder

所以我的应用程序会消耗两倍的磁盘空间吗?我不明白为什么必须将数据库文件放在特定文件夹中?

谢谢

【问题讨论】:

  • 什么?不过,我无法从 /raw 或 /assets 文件夹中删除它。

标签: android


【解决方案1】:

所以我的应用会消耗两倍的磁盘空间?

是的。从技术上讲,可能更多,因为您的数据库被压缩在 APK 文件中。

我不明白为什么必须将数据库文件放在特定文件夹中?

数据库文件不必位于特定文件夹中。但是,assets/ 是您的开发机器上的一个文件夹;它是设备上 APK 文件的一部分。 res/raw/ 中的所有内容也是如此。

顺便说一句,我推荐SQLiteAssetHelper for copying the database out of assets/

【讨论】:

  • 对,这就是我的困惑——我们可以直接从 /assets 或 /raw 读取其他资产,而无需先复制它们(或者这可能是操作系统在安装时自动为我们完成的)。缺点是使用 3mb sqlite db,我需要 (1) 在第一次启动时花几秒钟将其复制过来,(2) 在 apk 中消耗 3mb,然后在复制后在内部存储中消耗完全的。明白我们对此无能为力,这就是系统的工作方式,只是看起来它可能会更好。谢谢
  • @user291701:“我们可以直接从 /assets 或 /raw 读取其他资产”——作为 InputStream,是的,但不能用于随机访问,也不能用于修改。 “看起来它可能会更好”——欢迎您尝试使用APK expansion files 工具在首次运行时半自动下载您的数据库。或者,您可以在首次运行时自行下载数据库。
猜你喜欢
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-18
相关资源
最近更新 更多