【问题标题】:realm, check schema version领域,检查架构版本
【发布时间】:2015-07-15 01:03:02
【问题描述】:

我正在使用适用于 Android 的 Realm,我想知道如何获取当前架构版本。在他们的迁移示例中,版本递增然后保存,但我需要在进行任何升级之前检查版本。 谢谢。

【问题讨论】:

  • 您这样做的目的是什么?我可以想象,也许您只是想完全放弃某个低于某个特定版本的 Realm 并创建一个全新的 Realm。在这种情况下,迁移太复杂了。我想到的最简单的方法就是使用一个新名称的领域,然后尝试删除旧名称。无需担心架构版本。
  • 我尝试通过手动设置架构值高于当前值来调试升级过程,但有时我不知道哪个值是当前值
  • 来自Migration.execute(Realm realm, long version)version 参数是当前Realm 的版本。这会有帮助吗?
  • 我知道,但那是迁移已经触发的时候,如果我事先知道,我可以决定设置哪个模式值(以控制它是否应该迁移)
  • Realm 目前没有获取模式版本的 API。也许讨厌的方式是您可以使用Migration.execute 中的版本抛出自定义异常并捕获它。为什么需要决定设置哪个模式值?为什么不直接更新到最新版本?

标签: android realm


【解决方案1】:

您可以使用以下代码在迁移之前获取 Realm 的当前架构版本。

Realm.init(context);
RealmConfiguration realmConfig = new RealmConfiguration.Builder().build();
DynamicRealm realm = DynamicRealm.getInstance(realmConfig);
long version = dynRealm.getVersion();//this will return the existing schema version
dynRealm.close();

【讨论】:

    【解决方案2】:

    在示例中的 Migration 类中,您可以看到它们检查每个版本。 version 参数是当前领域的当前版本。如果您注意到在每个 if 语句之后,版本都会递增。

    if (version == desiredVersion){
       //Migration script
       version++;
    }
    

    无论如何,您都需要为所有需要迁移更改的版本编写迁移脚本。否则应用会崩溃。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-28
      • 2011-06-17
      相关资源
      最近更新 更多