Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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
Kotlin 无法在文件室数据库中执行迁移_Kotlin_Android Room - Fatal编程技术网

Kotlin 无法在文件室数据库中执行迁移

Kotlin 无法在文件室数据库中执行迁移,kotlin,android-room,Kotlin,Android Room,我尝试迁移数据库,但它总是说需要从3迁移到2,但找不到。我已经检查了数据库,我添加的列就在那里。我迷路了。我遵循了几个教程,但似乎不起作用。我也尝试过使用Fallback来破坏迁移(),但它也不起作用。有什么我错过的步骤吗 @Database(entities = [User::class], version = 2, exportSchema = false) @TypeConverters(dateConverter::class) abstract class UserDatabase:

我尝试迁移数据库,但它总是说需要从3迁移到2,但找不到。我已经检查了数据库,我添加的列就在那里。我迷路了。我遵循了几个教程,但似乎不起作用。我也尝试过使用Fallback来破坏迁移(),但它也不起作用。有什么我错过的步骤吗

@Database(entities = [User::class], version = 2,  exportSchema = false)
@TypeConverters(dateConverter::class)
abstract class UserDatabase: RoomDatabase() {

    abstract fun userDao(): UserDao

    companion object{
        @Volatile
        private var INSTANCE: UserDatabase? = null
        val migration_1_2: Migration = object: Migration(1,2){
            override fun migrate(database: SupportSQLiteDatabase){

            }
        }
        fun getDatabase(context: Context): UserDatabase{
            val tempInstance = INSTANCE
            if(tempInstance != null){
                return tempInstance
            }
            synchronized(this){
                val instance = Room.databaseBuilder(
                    context.applicationContext,
                    UserDatabase::class.java,
                    "user_database"
                ).addMigrations(migration_1_2)
                    .build()
                INSTANCE = instance
                return instance
            }
        }
    }
    
}
错误日志

2021-05-25 10:50:22.802 26100-26339/com.example.mybudgetingapp E/AndroidRuntime: FATAL EXCEPTION: arch_disk_io_0
    Process: com.example.mybudgetingapp, PID: 26100
    java.lang.RuntimeException: Exception while computing database live data.
        at androidx.room.RoomTrackingLiveData$1.run(RoomTrackingLiveData.java:92)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)
     Caused by: java.lang.IllegalStateException: A migration from 3 to 2 was required but not found. Please provide the necessary Migration path via RoomDatabase.Builder.addMigration(Migration ...) or allow for destructive migrations via one of the RoomDatabase.Builder.fallbackToDestructiveMigration* methods.
        at androidx.room.RoomOpenHelper.onUpgrade(RoomOpenHelper.java:117)
        at androidx.room.RoomOpenHelper.onDowngrade(RoomOpenHelper.java:129)
        at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.onDowngrade(FrameworkSQLiteOpenHelper.java:135)
        at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:414)
        at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:316)
        at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.getWritableSupportDatabase(FrameworkSQLiteOpenHelper.java:92)
        at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper.getWritableDatabase(FrameworkSQLiteOpenHelper.java:53)
        at androidx.room.RoomDatabase.inTransaction(RoomDatabase.java:476)
        at androidx.room.RoomDatabase.assertNotSuspendingTransaction(RoomDatabase.java:281)
        at androidx.room.RoomDatabase.query(RoomDatabase.java:324)
        at androidx.room.util.DBUtil.query(DBUtil.java:83)
        at com.example.mybudgetingapp.data.UserDao_Impl$9.call(UserDao_Impl.java:200)
        at com.example.mybudgetingapp.data.UserDao_Impl$9.call(UserDao_Impl.java:197)
        at androidx.room.RoomTrackingLiveData$1.run(RoomTrackingLiveData.java:90)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at java.lang.Thread.run(Thread.java:923)