RealmMigrationEndexception:在现有数据库Android上添加新表时,迁移是必需的

RealmMigrationEndexception:在现有数据库Android上添加新表时,迁移是必需的,android,realm,realm-mobile-platform,realm-migration,Android,Realm,Realm Mobile Platform,Realm Migration,我使用的是Realm gradle版本“3.0.0”,我有两个表格“Word”和“Favorite”,如下所示 现在我想添加第三个名为“History”的表 为此,我已经完成了以下代码 @Override public void migrate(DynamicRealm realm, long oldVersion, long newVersion) { final RealmSchema schema = realm.getSchema(); if

我使用的是Realm gradle版本“3.0.0”,我有两个表格“Word”和“Favorite”,如下所示

现在我想添加第三个名为“History”的表

为此,我已经完成了以下代码

@Override
    public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
        final RealmSchema schema = realm.getSchema();

        if (oldVersion == 0) {
            RealmObjectSchema wordSchema = schema.get("Word");
            wordSchema.addField(DBHelper.COLUMN_NAME_PRONOUCE, String.class);
            wordSchema.addField(DBHelper.COLUMN_NAME_TYPE, String.class);
            oldVersion++;
        } if(oldVersion == 1){
            RealmObjectSchema favouriteSchema = schema.get("Favourite");
            favouriteSchema.addField(DBHelper.COLUMN_NAME_ID, String.class);
            favouriteSchema.addField(DBHelper.COLUMN_NAME_WORD, String.class);
            favouriteSchema.addField(DBHelper.COLUMN_NAME_OBJECT_ID, String.class);
            favouriteSchema.addField(DBHelper.COLUMN_NAME_PRONOUCE, String.class);
            favouriteSchema.addField(DBHelper.COLUMN_NAME_TYPE, String.class);
            favouriteSchema.addField(DBHelper.COLUMN_NAME_MEANING, String.class);
            oldVersion++;
        }
         if(oldVersion == 2){
                schema.create("History")
                .addField(DBHelper.COLUMN_NAME_ID, String.class)
                .addField(DBHelper.COLUMN_NAME_WORD, String.class)
                .addField(DBHelper.COLUMN_NAME_OBJECT_ID, String.class)
                .addField(DBHelper.COLUMN_NAME_PRONOUCE, String.class)
                .addField(DBHelper.COLUMN_NAME_TYPE, String.class)
                .addField(DBHelper.COLUMN_NAME_MEANING, String.class);
                oldVersion++;
            }
    }
但我的错误率越来越低

io.realm.exceptions.RealmMigrationNeededException: Migration is required due to the following errors:
    - Property 'History.id' has been changed from 'string' to 'int'.
    - Property 'History.word' has been made required.
    - Property 'History.objectId' has been made required.
    - Property 'History.pronunciation' has been made required.
    - Property 'History.type' has been made required.
    - Property 'History.meaning' has been made required.
我以前没有创建过任何历史记录表,但为什么它会说History.id已从'string'更改为'int'

如何正确添加历史记录表

     if(oldVersion == 2){
            schema.create("History")
            .addField(DBHelper.COLUMN_NAME_ID, int.class)
            .addField(DBHelper.COLUMN_NAME_WORD, String.class, FieldAttribute.REQUIRED)
            .addField(DBHelper.COLUMN_NAME_OBJECT_ID, String.class, FieldAttribute.REQUIRED)
            .addField(DBHelper.COLUMN_NAME_PRONOUCE, String.class, FieldAttribute.REQUIRED)
            .addField(DBHelper.COLUMN_NAME_TYPE, String.class, FieldAttribute.REQUIRED)
            .addField(DBHelper.COLUMN_NAME_MEANING, String.class, FieldAttribute.REQUIRED);
            oldVersion++;
        }

在您的测试手机上,只需卸载/重新安装应用程序,否则您需要升级架构版本并将字段更改为正确的类型。

从技术上讲,我可以为
oldVersion==3
编写所需的迁移,如果它出了问题,但这很棘手,因为你必须更改PK类型。非常感谢你在文档中节省了我大量的时间,而且我无法找到添加新表的正确信息。他们在他们的