【发布时间】:2021-10-12 05:31:41
【问题描述】:
我正在尝试在首次加载应用程序时自动填充数据库。我正在尝试从本地副本“膨胀”数据库,如下所示:
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'。但是,每次预填充数据库时,它总是会拾取旧的错误数据。我尝试了以下方法:
- 已清除所有缓存并使其无效。
- 清理并重建。
- 检查数据库文件一百万次。
虽然资产文件夹中的文件是正确的,但它从哪里获取旧数据?
欢迎任何帮助。
【问题讨论】:
-
您使用的是什么版本的 Android Studio? Bumblebee Canary 5 存在以下问题:尽管您进行了更改,但它实际上不会在 API 29+ 设备上安装您的应用
-
您在测试替换数据库之前是否完全卸载了应用程序?您的应用是否在清单中启用了备份?如果您使用 Room 2.3.0,您是否尝试将可选的回调参数添加到
createFromAsset()以查看您的资产是否正在使用?您是否检查过构建的 APK 以确认 APK 中的资产有您修改后的数据? -
我使用的是 Android Studio 4.0。 @CommonsWare:我在测试替换数据库之前完全卸载了该应用程序。我仔细检查了手机上是否还有任何应用数据。没有。
createFromAsset()已经存在于函数调用中。 APK 内的数据库有旧数据。我已在清单中将“allowBackup”设置为 true。你认为这就是问题所在吗? -
@CommonsWare:我认为问题在于将
allowBackup设置为true。我把它弄错了,它起作用了。你能把那个答案写出来,我会把它标记为正确的。任何关于可能发生的事情的指示都会有所帮助。 -
“createFromAsset() 已经存在于函数调用中”——是的,我看到了。但是,我建议添加可选的回调参数。这是 Room 2.3.0 的新功能,它会让您知道您的资产是否已被使用。
标签: android android-room