Android : 领域迁移问题
Android : Realm Migration Issue
我是android的新手,我在我的应用程序中使用了领域,但我当时没有指定模式版本,现在我想升级应用程序并实现迁移。
以前,我是这样做的,
Realm.init(getApplicationContext());
RealmConfiguration realmConfiguration =
new RealmConfiguration.Builder().build();
realm = Realm.getInstance(realmConfiguration);
而现在,
Realm.init(getApplicationContext());
RealmConfiguration realmConfiguration =
new RealmConfiguration.Builder().schemaVersion(1).migration(new Migration()).build();
realm = Realm.getInstance(realmConfiguration);
而且,我收到了这个错误。
java.lang.IllegalArgumentException: Configurations cannot be different if used to open the same file.
Cached configuration:
realmDirectory: /data/user/0/in.avanti_app.student_companion.debug/files
realmFileName : default.realm
canonicalPath: /data/data/in.avanti_app.student_companion.debug/files/default.realm
key: [length: 0]
schemaVersion: 1
migration: in.avanti_app.student_companion.realmClasses.Migration@25
deleteRealmIfMigrationNeeded: false
durability: FULL
schemaMediator: io.realm.DefaultRealmModuleMediator@793ec9a4
New configuration:
realmDirectory: /data/user/0/in.avanti_app.student_companion.debug/files
realmFileName : default.realm
canonicalPath: /data/data/in.avanti_app.student_companion.debug/files/default.realm
key: [length: 0]
schemaVersion: 0
migration: null
deleteRealmIfMigrationNeeded: false
durability: FULL
schemaMediator: io.realm.DefaultRealmModuleMediator@793ec9a4
我还在迁移中覆盖了 hasCode 和 equals class。
调用Realm.init(Context)
在下面的代码中初始化一个"default configuration"
public static synchronized void init(Context context) {
if (BaseRealm.applicationContext == null) {
if (context == null) {
throw new IllegalArgumentException("Non-null context required.");
}
RealmCore.loadLibrary(context);
defaultConfiguration = new RealmConfiguration.Builder(context).build();
ObjectServerFacade.getSyncFacadeIfPossible().init(context);
BaseRealm.applicationContext = context.getApplicationContext();
SharedRealm.initialize(new File(context.getFilesDir(), ".realm.temp"));
}
}
但是 new RealmConfiguration.Builder(context).build();
设置了没有架构版本、迁移、deleteIfMigrationNeeded()
等的配置
为了设置新的默认配置,您需要创建配置然后调用 Realm.setDefaultConfiguration(realmConfig);
RealmConfiguration realmConfiguration =
new RealmConfiguration.Builder().schemaVersion(1).migration(new Migration()).build();
Realm.setDefaultConfiguration(realmConfiguration);
realm = Realm.getDefaultInstance();
我是android的新手,我在我的应用程序中使用了领域,但我当时没有指定模式版本,现在我想升级应用程序并实现迁移。
以前,我是这样做的,
Realm.init(getApplicationContext());
RealmConfiguration realmConfiguration =
new RealmConfiguration.Builder().build();
realm = Realm.getInstance(realmConfiguration);
而现在,
Realm.init(getApplicationContext());
RealmConfiguration realmConfiguration =
new RealmConfiguration.Builder().schemaVersion(1).migration(new Migration()).build();
realm = Realm.getInstance(realmConfiguration);
而且,我收到了这个错误。
java.lang.IllegalArgumentException: Configurations cannot be different if used to open the same file.
Cached configuration:
realmDirectory: /data/user/0/in.avanti_app.student_companion.debug/files
realmFileName : default.realm
canonicalPath: /data/data/in.avanti_app.student_companion.debug/files/default.realm
key: [length: 0]
schemaVersion: 1
migration: in.avanti_app.student_companion.realmClasses.Migration@25
deleteRealmIfMigrationNeeded: false
durability: FULL
schemaMediator: io.realm.DefaultRealmModuleMediator@793ec9a4
New configuration:
realmDirectory: /data/user/0/in.avanti_app.student_companion.debug/files
realmFileName : default.realm
canonicalPath: /data/data/in.avanti_app.student_companion.debug/files/default.realm
key: [length: 0]
schemaVersion: 0
migration: null
deleteRealmIfMigrationNeeded: false
durability: FULL
schemaMediator: io.realm.DefaultRealmModuleMediator@793ec9a4
我还在迁移中覆盖了 hasCode 和 equals class。
调用Realm.init(Context)
在下面的代码中初始化一个"default configuration"
public static synchronized void init(Context context) {
if (BaseRealm.applicationContext == null) {
if (context == null) {
throw new IllegalArgumentException("Non-null context required.");
}
RealmCore.loadLibrary(context);
defaultConfiguration = new RealmConfiguration.Builder(context).build();
ObjectServerFacade.getSyncFacadeIfPossible().init(context);
BaseRealm.applicationContext = context.getApplicationContext();
SharedRealm.initialize(new File(context.getFilesDir(), ".realm.temp"));
}
}
但是 new RealmConfiguration.Builder(context).build();
设置了没有架构版本、迁移、deleteIfMigrationNeeded()
等的配置
为了设置新的默认配置,您需要创建配置然后调用 Realm.setDefaultConfiguration(realmConfig);
RealmConfiguration realmConfiguration =
new RealmConfiguration.Builder().schemaVersion(1).migration(new Migration()).build();
Realm.setDefaultConfiguration(realmConfiguration);
realm = Realm.getDefaultInstance();