【问题标题】:Embed a database in the .apk of a distributed application [Android]在分布式应用程序的 .apk 中嵌入数据库 [Android]
【发布时间】:2011-03-02 01:53:35
【问题描述】:

我的问题是我认为很简单,但我认为答案不会是...... 我的应用程序中有很多内容要使其正常运行,我正在考虑将所有内容放入数据库中,然后将其分发到嵌入式数据库中市场。 唯一的麻烦是我不知道该怎么做。 我知道我可以使用我的数据库的内容从 Eclipse DDMS 中提取一个文件 .db,我想我需要将它放在我的应用程序的资产文件夹中,但是如何让应用程序使用它来重新生成应用程序数据库? 如果您有任何代码或帮助的链接,那就太好了。 谢谢

【问题讨论】:

    标签: android database embedded-database


    【解决方案1】:

    为了实现您的要求,您可以将 .db 文件放在您的 assets/ 目录中,并在您第一次启动应用程序时将其复制到适当的位置.....

    final String DB_DESTINATION = "/data/data/YOUR_PACKAGE_NAME/databases/MyDatabaseFile.db";
    
    // Check if the database exists before copying
    boolean initialiseDatabase = (new File(DB_DESTINATION)).exists();
    if (initialiseDatabase == false) {
    
        // Open the .db file in your assets directory
        InputStream is = getContext().getAssets().open("MyDatabaseFile.db");
    
        // Copy the database into the destination
        OutputStream os = new FileOutputStream(DB_DESTINATION);
        byte[] buffer = new byte[1024];
        int length;
        while ((length = is.read(buffer)) > 0){
            os.write(buffer, 0, length);
        }
        os.flush();
    
        os.close();
        is.close();
    }
    

    其中“initialiseDatabase”是一些标志,表明应用程序是否已首次启动。

    虽然,如果您正在考虑存储大量数据,正如您所提到的:我强烈建议您避免使用它来膨胀 APK 文件,并使用 Internet 连接下载数据库记录(从托管服务器)应用程序已启动。通过这种方式,您可以显示一个进度条,向用户表明他们为什么要等待很长时间才能开始使用该应用程序。使 APK 特别大通常会阻止人们首先安装它。

    【讨论】:

    • 嗯,我之前用的是进度条,但是因为我要下载很多图片,还要解析几个XML,所以需要很多时间,尤其是当你使用3G网络而不是无线网络
    • 只检查数据库是否已经存在而不是使用布尔值不是更容易吗?应用程序关闭时如何跟踪布尔值?进入数据库?
    • 这正是布尔值所代表的含义,我将其留作实现练习。我已经更新了示例代码,说明您可能会如何处理。
    • 使用“在 APK 中捆绑”的方法而不是在启动时下载数据并没有错,只是要小心,如果超过 5-10MB,人们很可能会避免安装您的应用程序。在现有的 Android 手机上,手机内的存储空间实在是太宝贵了。
    • 不不,我只是加载 1.8Mo,但是,我收到关于资产最大大小的错误...告诉我我的 1.8Mo 超过了允许的 1Mo...
    【解决方案2】:

    您可以实施中间解决方案:使用上述方法,但不要分发 db 文件,而是将其放在服务器上的某个地方。根据我的经验,获取文件只占处理时间的 10%,其余时间是解析图像并将其序列化到数据库

    【讨论】:

    • 其实我的目的是避免把它放在服务器上,在安装应用程序后直接强制下载...
    • 我明白了。我正在为我的应用程序考虑它,但后来我查看了 db size 和它的另一个 +350K。人们对此很敏感,但如果你有良好的连接,它肯定会比零碎下载和后续处理更快
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    • 2011-08-18
    • 2010-09-22
    • 2010-09-18
    • 1970-01-01
    相关资源
    最近更新 更多