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




Что вам нужно сделать в вашем случае, так это удалить файл 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
Это тоже имеет смысл!
Спасибо за ответ. Это действительно помогло разобраться в ситуации, но мне не нужен лишний ввод / вывод в том месте, где формируется конфигурация. Думаю над вариантом решения, удалять ли базу данных, в зависимости от версии приложения.