【问题标题】:RealmMigrationNeededException when changing Realm model [duplicate]更改领域模型时的 RealmMigrationNeededException [重复]
【发布时间】:2015-06-08 17:05:33
【问题描述】:

每当我更改模型(例如添加更多字段)时,应用程序都会崩溃并出现 io.realm.exceptions.RealmMigrationNeededException 错误。只有在我卸载并重新安装该应用后才能解决此问题。

对迁移有什么建议吗?我只使用默认实例。

【问题讨论】:

  • @EpicPandaForce 这个问题在你标记的重复之前很久就被问过了。
  • 另一个问题的接受答案比这个更好,从技术上讲,我将一堆问题联系在一起,无论提问的日期如何。

标签: android realm


【解决方案1】:

如果您在丢失旧数据方面没有任何问题,那么您可以删除领域配置并创建新的。

Realm realm = null;

                    try {
                       realm = Realm.getInstance(MainActivity.this);
                    } catch (RealmMigrationNeededException r) {
                        Realm.deleteRealmFile(MainActivity.this);
                        realm = Realm.getInstance(MainActivity.this);
                    }

或

RealmConfiguration config2 = new RealmConfiguration.Builder(this)
                .name("default2") 
                .schemaVersion(3) 
                .deleteRealmIfMigrationNeeded() 
                .build(); 


        realm = Realm.getInstance(config2);

如果您不想丢失数据,则必须执行 Migration,请参阅此示例 here。

【讨论】:

  • deleteRealmIfMigrationNeeded 行删除我所有模式的所有记录
【解决方案2】:

你应该可以在这里找到你需要的信息:

https://realm.io/docs/java/latest/#migrations

只需将代码更改为新定义即可,如果您 在旧数据库模式下没有数据存储在磁盘上。但是如果你 这样做,Realm 在代码中看到的定义和 Realm 在磁盘上看到的数据,所以会抛出异常。

【讨论】:

  • 感谢 xBroak。你知道我们如何避免这种情况吗?
  • 如果您不关心 Realm 中的数据,您可以删除 Realm 文件并打开一个新实例。这将自动创建一个具有正确架构的新实例。如果您确实关心您需要编写迁移块的数据。您可以在我们的迁移示例中查看更多详细信息:github.com/realm/realm-java/tree/master/examples/…
  • 嗨 @kodingralph 就像 Christian 也链接了一样,单击领域迁移部分上示例代码的链接,该链接将向您展示如何针对您的情况发起迁移。
  • 谢谢大家。。我以前看过,但不解释就不容易理解。不过我想我会再看看它..
【解决方案3】:

0.84.2 中的领域迁移发生了很大变化,使领域 (0.84.2) 迁移对我有用的关键点是理解:

  • 当您的应用程序有一个领域数据库时,schemaVersion 始终为 0 指定 schemaVersion。在大多数情况下这是正确的,因为你 一旦你开始在配置中使用 schemaVersion 需要迁移并且已经在运行您的应用的实时版本。

  • schemaVersion 会自动存储,并且当您的应用程序全新安装并且您已经处于 schemaVersion 3 领域时 自动检查是否有异常,如果没有则设置 schemaVersion 为 3,因此您的迁移不会在不需要时运行。 这也意味着您不必再存储任何东西 共享首选项。

  • 在迁移过程中,当类型不可为空时,您必须设置新列的所有值,...

  • 可以插入空字符串,但只有在列上设置 convertColumnToNullable 时才能插入

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多