android - Realm 在第一次调用时崩溃。如果用于打开同一个文件,配置不能不同

标签 android database configuration realm realm-migration

我收到这个错误:

Fatal Exception: java.lang.IllegalArgumentException
Configurations cannot be different if used to open the same file. Cached configuration: realmFolder: /data/user/0/nl.hgrams.passenger/files realmFileName : myrealm.realm canonicalPath: /data/data/nl.hgrams.passenger/files/myrealm.realm key: [length: 0] schemaVersion: 3 migration: null deleteRealmIfMigrationNeeded: false durability: FULL schemaMediator: io.realm.DefaultRealmModuleMediator@ea820c5a New configuration: realmFolder: /data/user/0/nl.hgrams.passenger/files realmFileName : myrealm.realm canonicalPath: /data/data/nl.hgrams.passenger/files/myrealm.realm key: [length: 0] schemaVersion: 3 migration: null deleteRealmIfMigrationNeeded: true durability: FULL schemaMediator: io.realm.DefaultRealmModuleMediator@ea820c5a

这里:

 io.realm.RealmCache.validateConfiguration (RealmCache.java:226)
io.realm.RealmCache.createRealmOrGetFromCache (RealmCache.java:103)
io.realm.Realm.getInstance (Realm.java:197)

在这一行:

Realm realm = Realm.getInstance(PSLocationCenter.getInstance().Config);

我的配置是这样完成的:

  Realm realm = null, realmActive = null;
        try {
            // should throw as migration is required
            Log.i("", "migration entered here, tried to open");
            if (Config == null) {
                Config = new RealmConfiguration.Builder(PSLocationCenter.this).name("myrealm.realm").schemaVersion(3).build();
            }
            if (activeConfig == null) {
                activeConfig = new RealmConfiguration.Builder(PSLocationCenter.this).name("active.realm").schemaVersion(2).build();
            }
            realm = Realm.getInstance(Config);
            realmActive = Realm.getInstance(activeConfig);
        } catch (RealmMigrationNeededException ex) {
            if(realm != null)
                realm.close();
            if(realmActive != null)
                realmActive.close();
            Config = new RealmConfiguration.Builder(PSLocationCenter.this).name("myrealm.realm").schemaVersion(3).deleteRealmIfMigrationNeeded().build();
            activeConfig = new RealmConfiguration.Builder(PSLocationCenter.this).name("active.realm").schemaVersion(2).deleteRealmIfMigrationNeeded().build();
            PSLocationCenter.getInstance().pref.setAuthenticationToken(null);
        }

我的问题是,如何关闭/关闭打开文件的配置,以便我使用第二个配置(带有 deleteRealmIfMigrationNeeded 的配置?

最佳答案

我不确定你想用上面的代码实现什么,但是你将两个不同的配置关联到同一个 Realm 文件:

line 5: Config = new RealmConfiguration.Builder(PSLocationCenter.this).name("myrealm.realm").schemaVersion(3).build();

line 17: Config = new RealmConfiguration.Builder(PSLocationCenter.this).name("myrealm.realm").schemaVersion(3).deleteRealmIfMigrationNeeded().build();

如错误消息所述,这违反了契约(Contract)。

关于android - Realm 在第一次调用时崩溃。如果用于打开同一个文件,配置不能不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36126641/

相关文章:

java - Android编码字符串并显示在textView中

sql - 什么是 Visual Studio GDR R2?我还需要 Power Tools吗?

Java:使用属性文件中的键名称而不使用硬编码字符串作为键

android - 如何检测Android中布局的方向变化?

java - 如何从数据库获取图像并设置数据的位置?

sql - SQL Server 数据库 'optimizing' 索引的奇怪结果,原因是什么?

Android 我想从在线数据库流式传输图像

Apache Config - 排除子目录

java - 带有干扰器的 log4j2 配置

android - Proguard:如何解决错误代码 1?