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



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

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

原因:java.lang.IllegalStateException:迁移不正确 handle items(org.sanpra.checklist.activity.checklistItem). 预期: 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=[]}

在 org.sanpra.checklist.dbhelper.ItemsDatabase_Impl$1.验证迁移(ItemsDatabase_Impl.java:66) 在 android.arch.persistence.room.RoomOpenHelper.onUpgrade(RoomOpenHelper.java:75) 在 android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.onUpgrade(FrameworkSQLiteOpenHelper.java:118) 在 android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:299) 在 android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:194) 在 android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.getWritableSupportDatabase(FrameworkSQLiteOpenHelper.java:93) 在 android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper.getWritableDatabase(FrameworkSQLiteOpenHelper.java:54) 在 android.arch.persistence.room.RoomDatabase.query(RoomDatabase.java:193) 在 org.sanpra.checklist.activity.ItemsDao_Impl.获取所有项目(ItemsDao_Impl.java:229) 在 org.sanpra.checklist.activity.ChecklistItemsCursorLoader.loadInBackground(ChecklistItemsCursorLoader.java:46) 在 org.sanpra.checklist.activity.ChecklistItemsCursorLoader.loadInBackground(ChecklistItemsCursorLoader.java:32) 在 android.support.v4.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:306) 在 android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:59) 在 android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:47) 在 android.support.v4.content.ModernAsyncTask$2.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 不为空,但房间预期为空

最新更新