Как правильно обновить версию библиотеки базы данных Realm на Android?

#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 должен автоматически обрабатывать добавление полей при условии, что вы просто увеличиваете номер версии схемы. Код миграции явно необходим только для преобразования типов данных или вставки новых данных по умолчанию.