Помните, когда в SQLite вы хотели добавить таблицу, вам пришлось сделать следующее:
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
int currentVersion = oldVersion;
if(currentVersion == 1) {
db.execSql("CREATE TABLE Blah(personId int, name varchar(255))");
currentVersion++;
}
...
}
И так далее?
Ну, Realm - это не SQLite, но он все еще нуждается ввам нужно изменить схему, чтобы добавить новые классы модели и применить необходимые изменения схемы.
Таким образом, вам нужно определить миграцию ( см. весь этот раздел в документации ), которая обрабатываетверсия схемы изменится с X на Y.
Итак, вы создадите миграцию:
public class Migration implements RealmMigration {
@Override
public void migrate(final DynamicRealm realm, long oldVersion, long newVersion) {
...
}
@Override
public int hashCode() { return Migration.class.hashCode(); }
@Override
public boolean equals(Object obj) { return obj != null && obj instanceof Migration; }
}
Увеличьте версию схемы и укажите миграцию в RealmConfiguration
Realm.setDefaultConfiguration(new RealmConfiguration.Builder()
.schemaVersion(currentVersion+1) // probably a constant somewhere
.migration(new Migration())
.build());
И вам на самом деле нужно написать миграцию с помощью API DynamicRealm, который добавляет вновь добавленный класс.
@Override
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
RealmSchema schema = realm.getSchema();
if(oldVersion == 0) {
RealmObjectSchema transactionacknowledgedata =
schema.create("transactionacknowledgedata");
transactionacknowledgedata.addField("name", String.class);
oldVersion++;
}
}
Ну, либо это так, либо вы установили new RealmConfiguration.Builder().deleteIfMigrationNeeded().build()
и выЯ буду удалять (и воссоздавать) Царство всякий раз, когда происходит изменение модели.