It turned out another exception after adding objects.
- migration required
- class not found in schema
- version on disk is newer than requested
What's 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 and Run
4 - Add RealmTestObjectTwo.java Same as RealmTestObjectOne.java, but different id
5 - Change 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; } }
solvable
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; } }
source share