迁移到房间,应用程序在启动时崩溃并出现异常
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 期望它为空
这是应用程序的代码: 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 期望它为空