我正在学习这门关于在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或Entity类也不会改变(这会改变模式)。我认为这就是引发破坏性移民的原因。
因此,我希望数据库一旦创建,其内容就会持续存在。然而,我发现当我重建我的应用程序并再次运行它时,内容(有时?)消失了。为什么会这样?我是否以某种方式用DB实例弄乱了文件系统(据我所知,Room默认使用的文件系统位置需要root访问权限,所以我说不出来)?