2016-08-05 123 views
1

在android中我有領域版本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

當你升級你的境界DB到新版本從任何舊版本那麼這 1.0.0+如果缺省運行的應用程序,然後我們得到了遷移錯誤。但是通過使用Migration定義如下,我們可以解決這個問題。

定義域應用程序實例如下應用類中:

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); 
}} 

如果你不這樣做的數據庫結構的任何變化,只升級版本境界然後定義如下遷移類。如果你做任何數據庫結構改變,那麼你必須在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). 

所以,如果你要避免在此情況下使用遷移,您只需在@PrimaryKey字段中指定@Required即可。