直到现在,我在我的安卓系统中使用了 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.
如何在不删除数据库的情况下更改配置
我认为您的问题是您多次创建 RealmConfiguration 。这本身应该不是问题(尽管效率低下),但问题出现在您的Migration
类上。在内部,我们比较配置对象中的所有状态,如果您没有覆盖Migration
类中的equals
和hashCode
,则会出现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);
}
}
使用 schemaVersion()
设置新的模式版本时,版本号应等于或高于现有领域文件的模式版本。然后,您提供的RealmMigration()
应该能够将旧版本的架构转换为新版本。
我建议先检查您现有的架构版本,然后检查您的RealmObject
以进行适当的转换。