Room 用旧数据膨胀数据库

Room inflates database with old data

我正在尝试在首次加载应用程序时自动填充数据库。我正在尝试从本地副本 'inflate' 数据库,如下所示:

 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'。然而,每次数据库被预填充时,它总是会选择旧的、错误的数据。我尝试了以下方法:

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

根据评论中的讨论,您似乎遇到了由于模式更改导致的 auto-backup. With Room, this more typically manifests with a 错误 — 在您的情况下,模式相同,但数据不同。

您可以配置自动备份,无论是禁用它(就像您所做的那样,将 android:allowBackup 设置为 false)还是控制备份哪些文件(使用 android:fullBackupContent ).而且,您可以在每个构建变体的基础上执行此操作,例如 debugrelease 构建具有不同的值:

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