2016-09-30 1 views
0

У меня возникает проблема, которая пытается перенести старую структуру Realm в новую, с новым объектом RealmObject и параметрами. Дело в том, что приложение уже находится в Google Play, поэтому пользователи уже хранят определенные данные в некоторых таблицах. Цель состоит в том, чтобы восстановить данные перед удалением базы данных области и сохранить ее где-то в другом месте. Я нахожусь в дилемме о том, что делать прямо сейчас.Резервное копирование и миграция в реальном времени на новую версию

Чтобы попытаться решить эту проблему, я реализовал следующие в моем классе Application:

RealmMigration migration = new RealmMigration(){ 
    @Override 
    public void migrate(...){ 
     if(oldVersion == 0){ 
      //Get the data from realm and store somewhere else 
     } 
    } 
} 

RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this) 
     .schemaVersion(1) 
     .migration(migration) 
     .deleteRealmIfMigrationNeeded() 
     .build(); 
Realm.setDefaultConfiguration(realmConfiguration); 
Realm.getInstance(realmConfiguration); 

Проблема здесь состоит в том, что делает это, метод deleteRealmIfMigrationNeeded() выполняется и миграция() не является, то все данные теряются, прежде чем я смогу получить данные из базы данных. Я хочу, чтобы при обновлении приложения я мог получить версию из базы данных, сравнить, если она является старой версией и сохранить данные из Realm в файле, а затем выполнить deleteRealmIfMigrationNeeded(), чтобы избежать RealmMigrationNeededException.

я уже смотрел на следующие ссылки:
How to backup Realm DB in Android before deleting the Realm file. Is there any way to restore the backup file?
Realm not auto-deleting database if migration needed
https://github.com/realm/realm-cocoa/issues/3583

ответ

1

Я решил проблему путем добавления надлежащего RealmSchema в мигрируют() метод. Что-то вроде:

RealmMigration migration = new RealmMigration(){ 
    @Override 
    public void migrate(...){ 
     final RealmSchema = relam.getSchema(); 
     if(oldVersion == 0){ 
      if(!schema.get("Person").getPrimaryKey().equals("codePerson")){ 
       schema.get("Person") 
        .removePrimaryKey() 
        .addPrimaryKey("codePerson"); 
      } 

      //There are other similar statements here 
     } 
    } 
} 

Затем я удалил метод deleteRealmIfMigrationNeeded() из RealmConfiguration.

Он решил RealmMigrationNeededException, поэтому приложение запускается правильно.

Смежные вопросы