我正在尝试学习如何在 Android 应用程序中使用 Room 来存储本地数据。我尝试按照以下说明进行操作:https://developer.android.com/training/data-storage/room
我设法让一个简单的应用程序运行起来,其中数据库定义为:
@Database(entities = [Location::class], version = 1, exportSchema = true)
abstract class LocationDatabase : RoomDatabase() {
abstract fun locationDAO(): LocationDAO
companion object {
@Volatile
private var INSTANCE: LocationDatabase? = null
fun getDatabase(context: Context): LocationDatabase {
return INSTANCE ?: synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
LocationDatabase::class.java,
"location_database"
)
.fallbackToDestructiveMigration()
.build()
INSTANCE = instance
instance
}
}
}
}
通过在应用程序级别 build.gradle.kts 文件中包含以下内容,我可以在构建项目时提取数据库的架构。
ksp {
arg("room.schemaLocation", "$projectDir/schemas")
}
我想问如何使用此架构来创建数据库文件并预填充它,然后在创建应用程序时可以将其用作内容源。我想要完成的是用一些数据预先填充 Room 数据库,这些数据将在应用程序运行时访问。
我尝试找到一些有关如何继续此操作的指南,但未能找到我可以遵循的资源。
我想问如何使用此架构来创建数据库文件并预填充它。
最简单的方法是让 Room 通过以下方式进行解释:
@Database
带注释的类同名的类(在您的情况下是LocationDatabase),但后缀为 _Impl (在您的情况下是LocationDatabase_Impl
)。createAllTables
方法,其中有一行代码执行SQL来创建所有表。此 SQL 正是 Room 所期望的,并且可以复制到您用来构建预打包数据库的任何工具。createFromAsset
方法