我在我的机器人中使用Realm,直到现在
new RealmConfiguration.Builder(this) .build();
我稍后会阅读有关添加架构和迁移的可能性。 所以在我的应用程序的新版本中,我想添加迁移功能。 所以我将上面的行改为:
new RealmConfiguration.Builder(this) .schemaVersion(0) .migration(new Migration()) .build();
但现在我收到了错误
IllegalArgumentException: Configurations cannot be different if used to open the same file.
如何在不删除数据库的情况下更改配置
答案 0 :(得分:24)
我认为您的问题是您多次创建RealmConfiguration。这本身不应该是一个问题(尽管效率很低),但问题出现在你的Migration
类中。在内部我们比较配置对象中的所有状态,如果你没有覆盖equals
类中的hashCode
和Migration
,那么你会遇到new Migration().equals(new Migration()) == false
会给出public class Migration implements RealmMigration {
// Migration logic...
@Override
public int hashCode() {
return 37;
}
@Override
public boolean equals(Object o) {
return (o instanceof Migration);
}
}
的情况你看到的错误。
一种解决方案是添加:
DBStuff
答案 1 :(得分:0)
使用schemaVersion()
设置新架构版本时,版本号应等于或高于现有realm文件的架构版本。您提供的RealmMigration()
应该能够将旧版本的模式转换为新版本。
我建议先检查您现有的架构版本,然后检查您的RealmObject
是否有适当的转化。