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;
}
}