4

我正在进行我的第一次 Realm 迁移并开始考虑版本号。这个版本号基于什么?

因为如果它基于您手机上的内容,如果新人安装该应用程序并获得迁移,我该如何处理?因为它还会更新由于全新安装而已设置的字段。

4

2 回答 2

7

来自Realm的Christian。迁移 API 仍处于非常实验性的状态,有点丑陋,所以现在版本号总是以 0 开头,而改变它的唯一方法是通过迁移。

这意味着,如果您想要使用 0 以外的不同版本进行全新安装,则必须执行以下操作:

   // Pseudo code
    public class RealmHelper() {

        private static SharedPreferences prefs;

        public static Realm getInstance() {
            if (!prefs.getBoolean("versionSet", false)) {
                String path = new File(context.getFilesDir(), Realm.DEFAULT_REALM_NAME).getAbsolutePath();
                Realm.migrateRealmAtPath(path, new RealmMigration() {
                            @Override
                            public long execute(Realm realm, long version) {
                                return 42; // Set version numbers
                            }
                        })
                prefs.edit().putBoolean("versionSet", true).apply();
            }

            return Realm.getInstance();
        }
    }

不过,这很快就会好很多:https ://github.com/realm/realm-java/pull/929

于 2015-04-30T04:40:43.247 回答
2

0.84.2 中的领域迁移发生了很大变化(请参阅 Christian 对新 API 的提示),使领域 (0.84.2) 迁移对我有用的关键点是理解:

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

  • schemaVersion 会自动存储,当您的应用程序重新安装并且您已经在 schemaVersion 3 上时,领域会自动检查是否有异常,如果没有,它将 schemaVersion 设置为 3,因此您的迁移不会在不需要时运行。这也意味着您不必再在 SharedPreferences 中存储任何内容。

  • 在迁移中,当类型不可为空时,您必须设置新列的所有值,当前版本的领域,...

  • 可以插入空字符串,但仅当在列上设置 convertColumnToNullable 时

于 2015-11-21T10:22:45.560 回答