Открыть область с новой конфигурацией realmconfiguration

Я использовал Realm в своем new RealmConfiguration.Builder(this) .build(); до сих пор с 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 . Внутри мы сравниваем все состояния в объектах конфигурации, и если вы не переопределили 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); } } 

Когда вы устанавливаете новую версию схемы с помощью schemaVersion() , номер версии должен быть равен или больше, чем версия схемы существующего файла области. Предоставляемый RealmMigration() должен иметь возможность конвертировать более старую версию схем в новую версию.

Я бы предложил сначала проверить вашу существующую версию схемы, а затем проверить ваш RealmObject s для соответствующего преобразования.