Ломаю голову с этой ошибкой. Я не мог найти никакого ответа до сих пор. У меня есть старая база данных, которую я переношу в библиотеку Persistence Room. Однако всякий раз, когда я выполняю миграцию, я получаю следующую ошибку:
java.lang.IllegalStateException: Migration didn't properly handle.
Код, который я использую, выглядит следующим образом:
@Entity(tableName = ROUTE_TABLE)
public class RouteData {
static final String ROUTE_TABLE = "name";
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "id")
private int id;
@ColumnInfo(name = "col1")
private String col1;
//Other columns with exactly same as 'col1' just different names
//Getters and Setters
}
Для миграции,
Room.databaseBuilder(context.getApplicationContext(), MyData.class, DATABASE_NAME)
.addMigrations(MIGRATION_LATEST)
.fallbackToDestructiveMigration()
.build();
private static final Migration MIGRATION_LATEST = new Migration(9, 10) {
@Override
public void migrate(SupportSQLiteDatabase db) {
//Log.i("Tag" , "Migration Started");
//Migration logic
//Log.i("Tag" , "Migration Ended");
}
};
Когда я запускаю программу. Я получаю журнал «Миграция завершена» в своем LogCat, но когда я снова пытаюсь получить доступ к базе данных, это дает мне следующую ошибку.
Caused by: java.lang.IllegalStateException: Migration didn't properly handle xxx.
Expected:
TableInfo{name='name', columns={col1=Column{name='col1', type='TEXT', notNull=false, primaryKeyPosition=0}, ....}, foreignKeys=[]}
Found:
TableInfo{name='name', columns={col1=Column{name='col1', type='INTEGER', notNull=false, primaryKeyPosition=0}, ....}, foreignKeys=[]}
Я понятия не имею, куда идет этот «ЦЕЛОЕ ЧИСЛО». Я попытался удалить, аннулировать кеш и любое другое тесно связанное решение. Есть идеи, что происходит? Он отлично работает, если вы только что установили приложение. Ошибка возникает только после миграции. Согласно моему журналу cat, все шаги миграции, кажется, завершены, но все еще показывает, что миграция не обрабатывается должным образом.