如果我尝试进行迁移,如何获取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/