#android #realm
#Android #realm
Вопрос:
В настоящее время мы используем Realm 6.x. Однако при попытке обновить библиотеку до последней версии (10.x) приложение вылетает во время открытия.
В приложении realm в настоящее время настроен на удаление всех данных при изменении схемы и compact db при открытии. Но даже при этой настройке приложение вылетает.
Нормально ли, что обновление основной версии приводит к сбою?
Как правильно выполнить обновление? Возможно ли это сделать без потери данных?
Ответ №1:
Хорошо для базы данных realm следуйте этому подходу.
RealmConfiguration config = new RealmConfiguration.Builder(context)
.schemaVersion(2) // Must be bumped when the schema changes
.migration(new MyMigration()) // Migration to run
.build();
Realm.setDefaultConfiguration(config);
// This will automatically trigger the migration if needed
Realm realm = Realm.getDefaultInstance();
public class MyMigration implements RealmMigration {
@Override
public void migrate(final DynamicRealm realm, long oldVersion, long newVersion) {
RealmSchema schema = realm.getSchema();
// Migrate from version 0 to version 1
if (oldVersion == 0) {
RealmObjectSchema userSchema = schema.get("User");
userSchema.addField("testRealm", String.class);
oldVersion ;
}
if (oldVersion == 1) { // ...
// ...
}
}
@Override
public int hashCode() { return MyMigration.class.hashCode(); }
@Override
public boolean equals(Object object) { return object != null amp;amp; object instanceof MyMigration; }
}
Также учтите, что
Realm.init(this) устанавливает RealmConfiguration по умолчанию и должен ONLY
вызываться внутри Application.onCreate
Комментарии:
1. Realm должен автоматически обрабатывать добавление полей при условии, что вы просто увеличиваете номер версии схемы. Код миграции явно необходим только для преобразования типов данных или вставки новых данных по умолчанию.