Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-如何在kotlin的房间数据库中预填充数据(已更新)?_Android_Sqlite_Android Room - Fatal编程技术网

Android-如何在kotlin的房间数据库中预填充数据(已更新)?

Android-如何在kotlin的房间数据库中预填充数据(已更新)?,android,sqlite,android-room,Android,Sqlite,Android Room,我在Kotlin房间(Android)中有一个这样的数据库,但我无法预填充,因为我从未进入。addCallback(CALLBACK),我该怎么做 @Database(entities = [Entry::class, Category::class], version = 2, exportSchema = false) @TypeConverters(RoomTypeConverters::class) abstract class FinDatabase : RoomDatabase()

我在Kotlin房间(Android)中有一个这样的数据库,但我无法预填充,因为我从未进入。addCallback(CALLBACK),我该怎么做

@Database(entities = [Entry::class, Category::class], version = 2, exportSchema = false)
@TypeConverters(RoomTypeConverters::class)
abstract class FinDatabase : RoomDatabase() {

    abstract val entryDao: EntryDao

    companion object {
        @Volatile
        private var INSTANCE: FinDatabase? = null
        fun getInstance(context: Context): FinDatabase {
            synchronized(this) {
                var instance = INSTANCE
                if (instance == null) {
                    instance = Room.databaseBuilder(
                        context.applicationContext,
                        FinDatabase::class.java,
                        "database"
                    )
                        .addCallback(CALLBACK)
                        .addMigrations(MIGRATION_1_2)
                        .build()
                    INSTANCE = instance
                }
                return instance
            }
        }

        private val CALLBACK = object : RoomDatabase.Callback() {
            override fun onCreate(db: SupportSQLiteDatabase) {
                super.onCreate(db)
                db.execSQL("INSERT CATEGORY (id, name) VALUES (1, \"TESTE\") ")
            }
        }
    }
}

我看得出这个问题是错误的。 请将您的查询更改为:

db.execSQL("INSERT INTO CATEGORY (id, name) VALUES (1, 'TESTE')")
注:
在创建数据库时(第一次运行时),回调的onCreate()将只被调用一次。您必须卸载并重新运行该应用程序才能再次触发回调。

但是,与此无关的是,不会调用方法。addCallback(callback)。。永远不要执行db。execSQL@JohnnyFagundes可以在创建数据库时(第一次运行时),回调的onCreate()将只被调用一次。你必须卸载并重新运行应用程序才能再次触发回调。好的,Badhrinath Canessane,现在我得到了它,它工作得很好。。我原以为我只玩Run应用程序是可行的,但在卸载并重新运行后,它就可行了。。感谢Mani在一个非常类似的场景中,我如何使用DAO实例,当DAO实例尝试插入数据时,我遇到了一个错误,我使用的是execSQL。。。但是我想使用dao实例。。。这是错误:由以下原因引起:java.lang.IllegalStateException:getDatabase递归调用