【问题标题】:Migration and Realm database version迁移和领域数据库版本
【发布时间】:2017-10-09 12:57:32
【问题描述】:

我有一个关于王国移民的问题。在捕获数据库版本 0 的应用程序中,在进行更新后,一切正常,但是,当应用程序的全新安装完成时,它会在重新打开时出现问题,因为它试图执行迁移到 1。处理这些案件的正确方法是什么?如何设置版本?

【问题讨论】:

  • 干净安装是否意味着所有文件都已删除?由于版本存储在 Realm 中,所以就像从头开始一样。
  • 没错,在新设备上安装。问题将是通过迁移模式版本 1。将旧应用程序更新到新应用程序时,它可以正常工作,但是如果在新设备上完成安装,则要杀死并再次打开应用程序需要例外试图再次实现迁移。
  • 当应用获得第一个实例时,Realm 文件被创建。架构版本未定义,因此使用模型类并将架构版本设置为您在 RealmConfiguration 中指定的内容(在您的情况下为 1)。下次启动应用时,磁盘上的版本和配置中的版本相同,不执行迁移。您是否在配置中设置架构版本?
  • 是的,我正在插入版本 1,但我认为我忘记了其他一些细节或做错了什么,因为测试项目有效。
  • 能否添加您的RealmConfiguration的代码、您的迁移以及如何获取实例?

标签: android realm database-migration


【解决方案1】:

在迁移类上,您需要先验证oldVersion,然后仅在确实需要时进行迁移。

// Example migration adding a new class
RealmMigration migration = new RealmMigration() {
  @Override
  public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {

     // DynamicRealm exposes an editable schema
     RealmSchema schema = realm.getSchema();

     // Migrate to version 1
     if (oldVersion == 0) {
        schema.create("Person")
            .addField("name", String.class)
            .addField("age", int.class);
        oldVersion++;
     }

     // Migrate to version 2: Add a primary key + object references
     // Example:
     if (oldVersion == 1) {
        schema.get("Person")
            .addField("id", long.class, FieldAttribute.PRIMARY_KEY)
            .addRealmObjectField("favoriteDog", schema.get("Dog"))
            .addRealmListField("dogs", schema.get("Dog"));
        oldVersion++;
     }
  }
}

Realm Migration example

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 2016-02-29
    相关资源
    最近更新 更多