我正在学习有关在 Android 开发中使用 Room 的课程: https://developer.android.com/codelabs/basic-android-kotlin-compose-update-data-room 仅当不存在 DB 时,才会定义 DB 类来创建新的 DB:
@Database(entities = [Item::class], version = 1, exportSchema = false)
abstract class InventoryDatabase : RoomDatabase() {
abstract fun itemDao(): ItemDao
companion object {
@Volatile
private var Instance: InventoryDatabase? = null
fun getDatabase(context: Context): InventoryDatabase {
return Instance ?: synchronized(this) {
Room.databaseBuilder(context, InventoryDatabase::class.java, "item_database")
.fallbackToDestructiveMigration()
.build()
.also { Instance = it }
}
}
}
}
DB 版本从未改变,我的 DB、DAO 或实体类也从未改变(这会改变架构)。我推测这就是触发破坏性迁移的原因。
因此,我期望一旦创建了数据库,其内容就会保留下来。但是,我发现当我重建应用程序并再次运行它时,内容(有时?)消失了。为什么会这样?我是否以某种方式用数据库实例弄乱了文件系统(据我所知,Room 默认使用的文件系统位置需要 root 访问权限,所以我无法分辨)?
在运行配置中取消选中“部署前清除应用存储”。