java.lang.IllegalStateException
Миграция неправильно обрабатывалась Пользователь (therealandroid.github.com.roomcore.java.User).
Ожидаемое:
TableInfo {name= 'user', columns = {name = Column { name= 'name', type = 'TEXT', notNull = false, primaryKeyPosition = 0}, age = Column {name= 'age', type = 'INTEGER', notNull = true, primaryKeyPosition = 0}, id = Столбец {name= 'id', type = 'INTEGER', notNull = true, primaryKeyPosition = 1}}, foreignKeys = []} Найдено:
Найдено
TableInfo {name= 'user', columns = {name = Column { name= 'name', type = 'TEXT', notNull = false, primaryKeyPosition = 0}, id = Столбец {name= 'id', type = 'INTEGER', notNull = true, primaryKeyPosition = 1}, age = Column {name= 'age', type = 'INTEGER', notNull = false, primaryKeyPosition = 0}}, foreignKeys = []}
Я пытаюсь выполнить простую миграцию, у меня есть класс под названием User
, и у него есть два столбца ID (primary key)
и NAME TEXT
, а затем я заполняю базу данных двумя данными пользователя, затем добавляю столбец AGE
в объекте User
и в константе переноса я добавляю alter table
для добавления этого нового столбца и, наконец, заменяю версию базы данных с 1 на 2.
Вот код
User.class
@Entity(tableName = "user")
public class User {
@PrimaryKey
private int id;
@ColumnInfo(name = "name")
private String name;
@ColumnInfo(name = "age")
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Класс базы данных
@Database(entities = {User.class}, version = 2)
public abstract class RoomDatabaseImpl extends RoomDatabase {
abstract UserDao userDao();
}
Код миграции
public static Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(SupportSQLiteDatabase database) {
database.execSQL("ALTER TABLE 'user' ADD COLUMN 'age' INTEGER");
}
};
и он вызывает
Room.databaseBuilder(context, RoomDatabaseImpl.class, "Sample.db")
.addMigrations(MIGRATION_1_2)
.allowMainThreadQueries()
.build();
Перед изменением добавления объекта AGE
и выполнения миграции я добавляю два регистра и он работает.
После выполнения миграции я просто попытался добавить нового пользователя ниже:
User user = new User();
user.setName("JoooJ");
user.setId(3);
user.setAge(18);
List<User> userList = new ArrayList<>();
userList.add(user);
App.database(this).userDao().insertAll(userList); // The crash happens here
Дополнительная информация:
Android Studio 3, и я не тестировал его.
Зависимости:
compile "android.arch.persistence.room:runtime:1.0.0-alpha9-1"
annotationProcessor "android.arch.persistence.room:compiler:1.0.0-alpha9-1"
compile "android.arch.persistence.room:rxjava2:1.0.0-alpha9-1"
gradle 2.3.3
Может кто-нибудь мне помочь, я действительно не знаю, что я делаю неправильно или если это ошибка.