Room で開発用初期データ(Seed)を登録する
https://developer.android.com/training/data-storage/room/prepopulate#from-asset の通り createFromAsset
を使うとシンプルに書けそうですが、データに手を加えたい時に面倒そうなので、次のようにしてみました。
// Application は android.app.Application
class App: Application() {
// AppDatabase は androidx.room.RoomDatabase のサブクラス
val db: AppDatabase by lazy {
Room
.databaseBuilder(applicationContext, AppDatabase::class.java, "app.db")
.build()
}
override fun onCreate() {
super.onCreate()
if (BuildConfig.DEBUG) {
debugSeed()
}
}
private fun debugSeed() {
val debugPreferences = getSharedPreferences("debug", Context.MODE_PRIVATE)
val key = "initialized"
if (debugPreferences.getBoolean(key, false)) {
return
}
// このメソッド内で開発用初期データを登録
DebugSeeder().seed(db)
debugPreferences.edit().putBoolean(key, true).apply()
}
}
Read other posts