2016-08-05 3 views
1

В андроиде у меня есть версия в мире 0.86. Я попытался обновить до 1.1.1, но потом он сделал ошибку, заявив, что мне нужна миграция области. Кто-нибудь знает, как перейти от одной версии к другой? Есть ли более безопасная версия, которую я могу обновить до этого, было бы проще реализовать? БлагодаряПереход на новую версию царства?

ответ

0

У нас есть примеры миграции здесь, что вы можете использовать, чтобы вы начали: https://github.com/realm/realm-java/blob/master/examples/migrationExample/src/main/java/io/realm/examples/realmmigrationexample/model/Migration.java

Миграция в общем задокументированы здесь: https://realm.io/docs/java/latest/#migrations

Простое решение для случая использования, когда вы используете Сферу как механизм кэширования сетевых запросов. Просто добавьте deleteRealmIfMigrationNeeded() к вашему RealmConfiguration: https://realm.io/docs/java/latest/api/io/realm/RealmConfiguration.Builder.html#deleteRealmIfMigrationNeeded--

0

При обновлении Realm DB к новой версии, чтобы 1.0.0+ от любой старой версии, то это Если мы по умолчанию запустить приложение, то мы получили ошибку миграции. Однако, используя определение миграции, как показано ниже, мы можем решить эту проблему.

Определение Realm экземпляра приложения внутри класса Application, как показано ниже:

public class MainApplication extends Application { 
@Override 
public void onCreate() { 
    super.onCreate(); 
    Fabric.with(this, new Crashlytics()); 

    VolleyHelper.init(this); 

    // The Realm file will be located in Context.getFilesDir() with name "default.realm" 
    RealmConfiguration config = new RealmConfiguration.Builder(this) 
      .schemaVersion(1) 
      .migration(new MyMigration()) 
      .build(); 
    Realm.setDefaultConfiguration(config); 
}} 

Если вы не сделаете какие-либо изменения в структуре базы данных и только обновление версии Realm затем Определить класс миграции, как показано ниже. Если вы измените структуру базы данных, вы должны определить это в классе MyMigration. Вы можете получить более подробную информацию о миграции здесь Realm Migration

public class MyMigration implements RealmMigration { 
@Override 
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) { 

}} 
+0

Он должен мигрировать, потому что '@ PrimaryKey' стал нулевым в 0.89.0 – EpicPandaForce

0

Другие уже связаны пример миграции и the docs, так что я просто скажу вам, что вы работаете в breaking change in 0.89.0

@PrimaryKey field value can now be null for String, Byte, Short, Integer, and Long types. 
Older Realms should be migrated, using RealmObjectSchema.setNullable(), 
or by adding the @Required annotation. (#2515). 

Так что, если вам хотите избежать использования миграции в этом случае, вам просто нужно указать @Required на своих @PrimaryKey полях.

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