迁移到新版本的域?

时间:2016-08-05 22:08:46

标签: android realm

在android中我有领域版本0.86。我试图升级到1.1.1,但之后它抛出一个错误,说我需要一个领域迁移。有谁知道如何从一个版本迁移到另一个版本?是否有更安全的版本我可以升级到更容易实现?感谢

3 个答案:

答案 0 :(得分: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

使用Realm作为网络请求缓存机制的用例的简单解决方案。只需将deleteRealmIfMigrationNeeded()添加到您的RealmConfiguration:https://realm.io/docs/java/latest/api/io/realm/RealmConfiguration.Builder.html#deleteRealmIfMigrationNeeded--

即可

答案 1 :(得分:0)

当您从任何旧版本将Realm DB升级到更新版本1.0.0+时,请执行此操作 如果我们默认运行应用程序,那么我们会收到迁移错误。但是,通过使用如下定义的迁移,我们可以解决这个问题。

在Application类中定义Realm app实例,如下所示:

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版本,则按以下方式定义Migration类。如果您进行任何数据库结构更改,则必须在MyMigration类下定义它。您可以从此处获取更多迁移信息Realm Migration

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

}}

答案 2 :(得分: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