5

Got different exception after adding objects.

  • migration needed
  • class not found in scheme
  • version on disk is newer than requested

What is wrong?

1 - MainActivity.java

RealmConfiguration realmConfiguration =
            new RealmConfiguration.Builder(context)
            .build();
    Realm.setDefaultConfiguration(realmConfiguration);

    Realm realm = Realm.getDefaultInstance();

    realm.executeTransaction(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
            RealmTestObjectOne testObjectOne = new RealmTestObjectOne();
            testObjectOne.setValue(value);
            realm.copyToRealmOrUpdate(testObjectOne);
        }
    });

2 - RealmTestObjectOne.java

public class RealmTestObjectOne extends RealmObject {
    @PrimaryKey
    private int key = 1;

    private String value;

    public RealmTestObjectOne() {
   }

    public int getKey() {
        return key;
    }

    public void setKey(int key) {
        this.key = key;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}

3 - Build & run

4 - Add RealmTestObjectTwo.java Same as RealmTestObjectOne.java but different id

5 - Modify RealmConfiguration

RealmConfiguration realmConfiguration =
    new RealmConfiguration.Builder(context)
    .schemaVersion(2)
    .migration(new Migration())
    .build();

5 - Add Migration.java

public class Migration implements RealmMigration {
    @Override
    public long execute(Realm realm, long l) {
        l += 1;
        return l;
    }
}

SOLVED

Thanks to @geisshirt answer.

public class Migration implements RealmMigration {
@Override
public long execute(Realm realm, long version) {
    if (version == 0) {
        Table table = realm.getTable(RealmTestObjectTwo.class);
        table.addColumn(ColumnType.INTEGER, "key");
        table.addColumn(ColumnType.STRING, "value");
        table.setPrimaryKey("key");
        version += 1;
    }

    return version;
}
}
  • You Migration class does not tell to add the new RealmTestObjectTwo class and its fields to the schema. You can take a look here for an example: https://github.com/realm/realm-java/blob/master/examples/migrationExample/src/main/java/io/realm/examples/realmmigrationexample/model/Migration.java – Emanuelez Jul 06 '15 at 17:56
  • Thanks. I saw that example already. It doesn't help because there are no interface to add new tables. It should be done automatically as I get it. – Maksim Bolshakov Jul 07 '15 at 09:04
  • 1
    The method `Realm.getTable()` will create the table if does not exist. – geisshirt Jul 08 '15 at 09:01

0 Answers0