首页 > 解决方案 > 房间用旧数据膨胀数据库

问题描述

我正在尝试在第一次加载应用程序时自动填充数据库。我正在尝试从本地副本“膨胀”数据库,如下所示:

 public static synchronized bDB getInstance(Context context) {
        if(bDB == null) {
            Log.v("Hello", "Inflating database.");
            bDB = Room.databaseBuilder(context.getApplicationContext(), BDB.class, databaseName)
                    .createFromAsset("database/bdb.db")
                    .fallbackToDestructiveMigration()
                    .build();
        }
        return bDB;
    }

我注意到初始文件中有一个错误(数据错误,架构保持不变)。我更正了它并更新了文件'bdb.db'。但是,每次预填充数据库时,它总是会拾取旧的错误数据。我尝试了以下方法:

虽然资产文件夹中的文件是正确的,但它从哪里获取旧数据?
任何帮助都是最受欢迎的。

标签: androidandroid-room

解决方案


根据评论中的讨论,您似乎被auto-backup咬了。使用 Room,由于架构更改,这更典型地表现为“无法验证数据完整性”错误 - 在您的情况下,架构是相同的,但数据不同。

您可以配置自动备份,包括禁用它(如您所做的那样,设置android:allowBackupfalse)或控制备份哪些文件(使用android:fullBackupContent)。而且,您可以在每个构建变体的基础上执行此操作,例如为 adebugrelease构建设置不同的值:

  • 对于android:allowBackup,您应该能够指向一个布尔资源,在main和中具有不同的值debug
  • 对于android:fullBackupContent,您可以在不同的 XML 资源中main使用debug不同的规则

推荐阅读