Ошибка миграции области Добавлено свойство 'x'

я не могу использовать область миграции

в моем проекте вам нужно настроить миграцию realm. Я создал класс миграции, добавил миграцию и добавил поле в realmObject, но миграция не работает

я получаю это сообщение об ошибке:

Перенос необходим из-за следующих ошибок:

  • Добавлено свойство PickupState.latitude.
  • Добавлено свойство PickupState.longitude.

старая модель realmObject

public class PickupState extends RealmObject {
  @PrimaryKey
  private long autoIncrementId;
  private long id;
  private String userName;
  private String eventType;
  private String eventData;
  private String syncStatus;
  private String syncErrorCode;

  public void setAutoIncrementId(long l) {
    autoIncrementId = l;
  }

  public long getAutoIncrementId() {
    return autoIncrementId;
  }

  public long getId() {
    return id;
  }

  public void setId(long id) {
    this.id = id;
  }

  public String getUserName() {
    return userName;
  }

  public void setUserName(String userName) {
    this.userName = userName;
  }

  public String getEventType() {
    return eventType;
  }

  public void setEventType(State eventType) {
    this.eventType = eventType.name();
  }

  public String getEventData() {
    return eventData;
  }

  public void setEventData(String eventData) {
    this.eventData = eventData;
  }

  public String getSyncStatus() {
    return syncStatus;
  }

  public void setSyncStatus(String syncStatus) {
    this.syncStatus = syncStatus;
  }

  public String getSyncErrorCode() {
    return syncErrorCode;
  }

  public void setSyncErrorCode(String syncErrorCode) {
    this.syncErrorCode = syncErrorCode;
  }
}

новый объект realmObject

public class PickupState extends RealmObject {
  @PrimaryKey
  private long autoIncrementId;
  private long id;
  private String userName;
  private String eventType;
  private String eventData;
  private String syncStatus;
  private String syncErrorCode;
  private double latitude;
  private double longitude;

  public void setAutoIncrementId(long l) {
    autoIncrementId = l;
  }

  public long getAutoIncrementId() {
    return autoIncrementId;
  }

  public long getId() {
    return id;
  }

  public void setId(long id) {
    this.id = id;
  }

  public String getUserName() {
    return userName;
  }

  public void setUserName(String userName) {
    this.userName = userName;
  }

  public String getEventType() {
    return eventType;
  }

  public void setEventType(State eventType) {
    this.eventType = eventType.name();
  }

  public String getEventData() {
    return eventData;
  }

  public void setEventData(String eventData) {
    this.eventData = eventData;
  }

  public String getSyncStatus() {
    return syncStatus;
  }

  public void setSyncStatus(String syncStatus) {
    this.syncStatus = syncStatus;
  }

  public String getSyncErrorCode() {
    return syncErrorCode;
  }

  public void setSyncErrorCode(String syncErrorCode) {
    this.syncErrorCode = syncErrorCode;
  }

  public double getLatitude() {
    return latitude;
  }

  public void setLatitude(double latitude) {
   this.latitude = latitude;
    }

   public double getLongitude() {
    return longitude;
  }

   public void setLongitude(double longitude) {
   this.longitude = longitude;
  }
}

класс миграции:

public class PickupStateMigration implements RealmMigration {

  @Override
  public void migrate(@NonNull DynamicRealm realm, long oldVersion, long newVersion) {
    final RealmObjectSchema schema = realm.getSchema().get("PickupState");
    assert schema != null;
    if (oldVersion == 0) {
        schema.addField("latitude", double.class);
        schema.addField("longitude", double.class);
      oldVersion++;
    }
  }
}

person Kourosh    schedule 04.07.2018    source источник


Ответы (2)


Чтобы миграция была выполнена, вам также необходимо поднять версию схемы.

RealmConfiguration config = new RealmConfiguration.Builder()
                                    .schemaVersion(1)
                                    .migration(new PickupStateMigration())
                                    // ...
                                    .build()
person EpicPandaForce    schedule 04.07.2018
comment
Я сделал это, но проблема не в этом - person Kourosh; 04.07.2018
comment
Нет другого пути, чтобы что-то пошло не так. Вы, вероятно, вызываете Realm.getDefaultInstance(), не установив Realm.setDefaultConfiguration(), поэтому вы загружаете Realm без миграции в его конфигурации. - person EpicPandaForce; 04.07.2018

Я сделал две таблицы и две разные schemaVersion Но я изменил одну версию и миграцию Теперь я изменил две версии, и у меня для них такая же миграция

Я должен использовать модуль для каждой таблицы, но я этого не делал

person Kourosh    schedule 04.07.2018