代码之家  ›  专栏  ›  技术社区  ›  BobDoolittle

使用Room开发Android应用程序-为什么在构建之间清除数据库?

  •  0
  • BobDoolittle  · 技术社区  · 9 月前

    我正在学习这门关于在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访问权限,所以我说不出来)?

    1 回复  |  直到 9 月前
        1
  •  1
  •   Martin Zeitler    9 月前

    取消选中运行配置中的“部署前清除应用存储”。 Screenshot: run configuration