迁移到房间,应用程序在启动时崩溃并出现异常

Migrating to room, app crashes on startup with exception

这是应用程序的代码: https://github.com/sandy-8925/Checklist/tree/room_db

当我构建并启动它时,应用程序总是崩溃并出现以下异常。请注意,我已经有了这个应用程序的早期版本和普通的 Sqlite DB

Caused by: java.lang.IllegalStateException: Migration didn't properly handle items(org.sanpra.checklist.activity.ChecklistItem). Expected: TableInfo{name='items', columns={checked=Column{name='checked', type='INTEGER', notNull=true, primaryKeyPosition=0}, _id=Column{name='_id', type='INTEGER', notNull=true, primaryKeyPosition=1}, desc=Column{name='desc', type='TEXT', notNull=false, primaryKeyPosition=0}}, foreignKeys=[], indices=[]} Found: TableInfo{name='items', columns={checked=Column{name='checked', type='integer', notNull=true, primaryKeyPosition=0}, _id=Column{name='_id', type='integer', notNull=false, primaryKeyPosition=1}, desc=Column{name='desc', type='text', notNull=true, primaryKeyPosition=0}}, foreignKeys=[], indices=[]}

at org.sanpra.checklist.dbhelper.ItemsDatabase_Impl.validateMigration(ItemsDatabase_Impl.java:66) at android.arch.persistence.room.RoomOpenHelper.onUpgrade(RoomOpenHelper.java:75) at android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.onUpgrade(FrameworkSQLiteOpenHelper.java:118) at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:299) at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:194) at android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.getWritableSupportDatabase(FrameworkSQLiteOpenHelper.java:93) at android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper.getWritableDatabase(FrameworkSQLiteOpenHelper.java:54) at android.arch.persistence.room.RoomDatabase.query(RoomDatabase.java:193) at org.sanpra.checklist.activity.ItemsDao_Impl.fetchAllItems(ItemsDao_Impl.java:229) at org.sanpra.checklist.activity.ChecklistItemsCursorLoader.loadInBackground(ChecklistItemsCursorLoader.java:46) at org.sanpra.checklist.activity.ChecklistItemsCursorLoader.loadInBackground(ChecklistItemsCursorLoader.java:32) at android.support.v4.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:306) at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:59) at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:47) at android.support.v4.content.ModernAsyncTask.call(ModernAsyncTask.java:138) at java.util.concurrent.FutureTask.run(FutureTask.java:266)

预计

TableInfo{name='items', columns={checked=Column{name='checked', type='INTEGER', notNull=true, primaryKeyPosition=0}, _id=Column{name='_id', type='INTEGER', notNull=true, primaryKeyPosition=1}, desc=Column{name='desc', type='TEXT', notNull=false, primaryKeyPosition=0}}, foreignKeys=[], indices=[]}

找到

TableInfo{name='items', columns={checked=Column{name='checked', type='integer', notNull=true, primaryKeyPosition=0}, _id=Column{name='_id', type='integer', notNull=false, primaryKeyPosition=1}, desc=Column{name='desc', type='text', notNull=true, primaryKeyPosition=0}}, foreignKeys=[], indices=[]}

_id 可以为空,但 Room 期望它不为空。

desc 不为空,但 Room 期望它为空