java - 如何获取 Realm 路径以进行迁移?

标签 java android realm

如果我尝试进行迁移,如何获取realmPath?我目前有这样的东西:

try {
    Realm realm = Realm.getInstance(this);
} catch (RealmMigrationNeededException e) {
    Realm.migrateRealmAtPath(???, new Migration());
}

另外,我有以下版本:

  • 版本 1 无 Realm
  • 版本 2 Realm
  • 带有迁移的版本 3 Realm

如何确保从版本 1 升级到版本 3 的用户以及直接安装版本 3 的用户将更新到最新的架构版本号(因为他们不需要运行迁移)?

从 v2 迁移到 v3 的用户将因迁移运行而获得版本提升,但不确定如何设置 Realm 架构版本。

最佳答案

来自 Realm 的 Christian。当前的迁移 API 仍然非常粗糙,因此唯一的方法是进行仅增加版本号的迁移。所以像下面这样的东西可能是目前最好的解决方法。

// Pseudo code
public static class RealmHelper {
    private static SharedPreferences prefs;
    public static Realm getInstance(Context context) {
        String realmPath = new File(context.getFilesDir(), "default.realm").getAbsolutePath();
        if (prefs.getBoolean("firstRun", true)) {
            Realm.migrateRealmAtPath(realmPath, new RealmMigration() {
                @Override
                public long migrate(Realm realm, long oldVersion) {
                    return 42; // new version of Realm
                }
            });
            prefs.edit().putBoolean("firstRun", false).commit();
        }

        try {
            return Realm.getInstance(context);
        } catch (RealmMigrationNeededException e) {
            Realm.migrateRealmAtPath(realmPath, new CustomMigration());
            return Realm.getInstance(context);
        }
    }
}

但是,我们希望很快就能改善这一点:https://github.com/realm/realm-java/pull/880

关于java - 如何获取 Realm 路径以进行迁移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29811940/

相关文章:

android - 如何在 android 中获得精确到 5 微秒的后续时间戳

ios - 无法从 RLMResult 获取对象(Swift)

java - 使用暂停和恢复选项从后台服务在 TextView 中设置运行计时器

java - Codename One createMaterial 命令的图标大小

android - 如何修复我的线性布局底部的按钮 : Android Studio

ios - Realm Swift 仅在本地使用,但它仍会尝试在线连接

swift - 如何在 Realm 中执行检查相关对象属性的查询?

java - 如何返回字符串中的数字循环? [Java]

java - 如何在 Apache Camel Blueprint 中使用异步路由

java - 从 Firebase 读取数据时出现 NullPointerException