6

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

4

2 回答 2

12

为了实现您的要求,您可以将 .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 特别大通常会阻止人们首先安装它。

于 2010-06-10T09:35:27.377 回答
1

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

于 2010-07-29T04:22:49.720 回答