具有新领域配置的开放领域



直到现在,我在我的安卓系统中使用了 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类中的equalshashCode,则会出现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以进行适当的转换。

最新更新