【问题标题】:big sqlite database in android applicationandroid应用程序中的大型sqlite数据库
【发布时间】:2010-12-08 20:10:42
【问题描述】:

我正在尝试构建字典应用程序(实际上它是对 google SearchableDictionary 示例的修改),其单词来源及其定义非常大,大约 5MB。我尝试了很多方法并使用了多种格式,但它仍然无法在 android 上正常运行。 Sqlite 数据库应该是最好的解决方案,我已经构建了它,它的大小是 10MB(尝试在运行前和运行时构建它)。 主要问题是定义的大小,但我看到其他一些应用程序已经设法做到这一点。可能是 android 系统内置了一些文件大小限制,但无论如何,如果没有的话,在这个 sqlite 数据库中搜索和运行查询需要花费很多时间。

我做错了什么? 顺便说一句:它必须是离线字典(下载定义最多 1 次)。

简而言之问题:

word -definition 
word2 -definition2...

存储在一个 10MB 的 sqlite 数据库中(尝试从资产加载它),无法正常工作。 通过一些技巧(使用 eclipse DDMS 工具手动加载),它可以工作,但速度非常慢。

【问题讨论】:

  • 您是如何尝试从资产中加载它的?代码在哪里?失败时的logcat输出在哪里?

标签: android sqlite


【解决方案1】:

您是从 Assets 文件夹加载数据库吗?如果是,那是你的问题。资产文件夹中的文件大小有限制(我相信是 1mb)。

你有两个选择:

  1. Split up your database into multiple 1mb files
  2. 创建一个网络服务。让您的应用程序调用 Web 服务,然后将数据库下载到您的 Android 设备。或者创建一个 Web 服务 API,您的应用程序使用它来根据需要获取数据。

【讨论】:

  • 在安装时下载数据库或其内容听起来不错,因为这样您就不会在 .apk 文件中提供的副本加上工作副本浪费设备上的空间,而只有工作副本复制。但是当然你需要一个网络服务器来下载它,你不能再使用安卓市场了。
【解决方案2】:

我通过压缩数据库并将其解压缩到外部缓存目录(SD 卡)中来实现。你可以在这里查看示例代码 - http://www.android.manutech.mobi/2011/03/how-to-manage-sqlite-databases-with.html

【讨论】:

    【解决方案3】:

    将其重命名为“databasename.mp3”或任何媒体格式。它不会被包管理器压缩,因此您可以根据需要使用它。

    【讨论】:

      【解决方案4】:

      您是否尝试过压缩文件?如果数据只是原始文本,我敢打赌它会压缩到小于 1 MB。

      【讨论】:

      • 我如何压缩文件,这有什么帮助?它只会减少包的大小,但我必须使用未压缩的才能搜索定义。
      • 你压缩它,把它放在资产中,然后当你的应用安装时解压缩它并把它放在数据库目录中。
      【解决方案5】:

      1) 使用 GZIP 仅存储 单词 的压缩版本。 (这将非常小,只有大约 350k,并且必须预先排序)

      2) 将列表加载到:

      new ArrayList<String>();
      

      3) 使用 binarySearch 查找单词

      .binarySearch
      

      4)当你需要一个定义时,用这个词调用这样的API

      http://services.aonaware.com//DictService/DictService.asmx/Define?word=aardvark

      5) 解析生成的 XML

      【讨论】:

        【解决方案6】:

        10M 文件太小了,不用担心。它没有工作,可能是因为打开数据库文件的方式。默认情况下,Android 从://data/data/PACKAGENAME/databases/DATABASENAME 读取数据库文件。

        一个简单的解决方案可能是:1) 将 db 文件压缩到 res/raw/DATABASE.zip,2) 然后将其解压缩到 //data/data/PACKAGENAME/databases/。

        您可以从这里获取 sqlite android 演示代码:http://www.cs.dartmouth.edu/~campbell/cs65/lecture15/lecture15.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多