Сегодня я изменил схему области приложения и реализовал Migration. Внутри миграции мне просто нужно было добавить поле, поэтому я сделал:
if (oldVersion == 0) {
RealmObjectSchema class = schema.get("Class");
class.addField("addedField", boolean.class, null)
.transform(new RealmObjectSchema.Function() {
@Override
public void apply(DynamicRealmObject obj) {
obj.set("addedField", false);
}
});
oldVersion++;
}
Но это стерло все в моем мире, у меня больше нет данных.
Это не проблема, так как я все еще на стадии разработки. Я выполнил миграцию вместо удаления/переустановки приложения, просто чтобы узнать, как реализовать RealmMigration.
Я сделал что-то неправильно? Это нормально, что у меня все стерлось? Мне нужно было добавить еще немного кода? Я уже прочитал документацию и взглянул на пример приложения. Предоставленный код больше ничего не дал.
Конфигурация области:
Realm.init(this);
RealmConfiguration newConfig = new RealmConfiguration.Builder()
.name("myRealm.realm")
.schemaVersion(1)
.migration(new SchemaMigration())
.build();
И по крайней мере:
Realm realm = Realm.getInstance(newConfig);
РЕДАКТИРОВАТЬ:
Я решил эту проблему, удалив файл name("myRealm.realm")
. При первой установке я не использовал RealmConfiguration
, поэтому имя области было: "default.realm". Спасибо, ребята, за вашу поддержку и ваши ответы!
deleteIfMigrationNeeded()
в RealmConfiguration.Builder, который проверяется перед попыткой миграции. - person EpicPandaForce   schedule 10.05.2017