Java - 领域迁移(v 0.85.0) - 字段数与

时间:2015-11-23 00:17:19

标签: android realm realm-migration

我正在使用Realm v 0.85.0在我的一个项目中尝试我的第一次Realm迁移。我从v 0.84.0迁移,但迁移也适用于早期版本。我已经按照文档中链接的https://github.com/realm/realm-java/tree/master/examples/migrationExample/src/main示例进行了操作。

在此迁移中,我尝试添加两个新表。为了添加每个新表,我的迁移代码如下所示:

public class Migration implements RealmMigration {
     @Override
     public long execute(Realm realm, long version) {
        if (version == 0)
        {
           Table newTableOne = realm.getTable(NewTableOne.class);
           newTableOne.addColumn(ColumnType.STRING, "columnOne");
           // Add any other needed columns here and repeat process for NewTableTwo

           // Rest of migration logic goes here...

           version++;
        }

        return version;
      }
    }

根据Migration on Realm 0.81.1,如果表不存在,getTable()方法将自动创建表。我不认为这是问题,但我只是为了完整性而把它包括在内。

我还尝试向现有表添加几个新列,并在这些新列上设置默认值。为此,我使用以下代码:

Table existingTable = realm.getTable(ExistingTable.class);
existingTable.addColumn(ColumnType.BOOLEAN, "newColumnOne");
existingTable.addColumn(ColumnType.INTEGER, "newColumnTwo");
// Any other new columns needed here

long newColumnOneIndex = getIndexForProperty(existingTable, "newColumnOne");
long newColumnTwoIndex = getIndexForProperty(existingTable, "newColumnTwo");

for (int i = 0; i < existingTable.size(); i++)
{
    userTable.setBoolean(newColumnOneIndex, i, false);
    userTable.setLong(newColumnTwoIndex, i, 5);
}

直接从Github上的示例中提取getIndexForProperty方法,如下所示:

private long getIndexForProperty(Table table, String name) {
        for (int i = 0; i < table.getColumnCount(); i++) {
            if (table.getColumnName(i).equals(name)) {
                return i;
            }
        }
        return -1;
    }

运行此迁移时,我收到RealmMigrationNeededException,指出“字段数不匹配 - 预计22但是23”。我查看了StackOverflow,并通过Google和Github维基进行了一些研究,但未能找到与此确切“字段数不匹配”消息相关的任何信息。

我确保每个模型类中的每个新字段都有一个addColumn行,我的模型中没有比添加列更多的字段,反之亦然。

非常感谢您提供的任何帮助。

0 个答案:

没有答案