Перенос Realm с воссозданием схемы в конкретную версию базы данных

До версии базы данных 11 в моем приложении пользователь не вводил данные. Так что миграция мне не понадобилась. Я использовал .deleteRealmIfMigrationNeeded(). Начиная с версии 11 пользователи могут вводить данные. Теперь мне нужно использовать миграцию. До версии 11 мне нужно воссоздавать схему, но в то же время, начиная с версии 11, мне нужно сохранять пользовательские данные. Как это сделать в моем пользовательском классе миграции?

Кроме того, в моем приложении используется шифрование. Я получаю ключ при авторизации приложения на сервере при запуске приложения. Название базы данных также формируется на основе этого ключа.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что вам нужно сделать в вашем случае, так это удалить файл Realm, если он старше версии 11, и в противном случае обработать миграцию по мере необходимости.

RealmConfiguration realmConfiguration = new RealmConfiguration.Builder()
                                            .schemaVersion(11)
                                            .migration(new MyMigration())
                                            ./*...*/.build();
Realm.setDefaultConfiguration(realmConfiguration);
DynamicRealm dynamicRealm = DynamicRealm.getInstance(realmConfiguration);
long schemaVersion = dynamicRealm.getVersion();
dynamicRealm.close();
if (schemaVersion < 11) {
    Realm.deleteRealm(realmConfiguration);
}
Realm realm = Realm.getDefaultInstance(); // should work now

Спасибо за ответ. Это действительно помогло разобраться в ситуации, но мне не нужен лишний ввод / вывод в том месте, где формируется конфигурация. Думаю над вариантом решения, удалять ли базу данных, в зависимости от версии приложения.

Est Stalegaykin 18.05.2018 08:57

Это тоже имеет смысл!

EpicPandaForce 18.05.2018 11:12

Другие вопросы по теме