使用setDefaultConfiguration

时间:2016-02-08 15:33:27

标签: android realm

我遇到了realm和他的方法setDefaultConfiguration的问题。 实际上,我的应用程序是多用户,我需要在几个领域配置之间切换。

在主要活动加载期间,我配置了这样的领域配置:

String bddName = String.format("%s.realm",userID);
            userFolder = new File(getApplicationContext().getFilesDir() + "/" + userID);
            config = new RealmConfiguration.Builder(userFolder)
                .name(bddName)
                .schemaVersion(2)
                .migration(new RealmMigration2())
                .build();
            Realm.setDefaultConfiguration(config);

但是,如果我尝试使用相同的配置配置两次,Realm会向我发送错误:

Configurations cannot be different if used to open the same file. 

是否可以测试当前配置是否与我想设置的配置不同? 我试过了:

if(!config.equals(Realm.getDefaultInstance().getConfiguration()))

但是在第一次启动Activity时,Realm会返回一个错误,因为没有设置默认实例。

我转过身,因为在设置领域之前无法测试领域配置。 你可以帮帮我吗 ? 非常感谢你。

编辑: 这个解决方案也不起作用,我也遇到了同样的错误,但是,RealmFileName是不同的:

try{
//first time, Realm is not configure, so It's catched.
//else, it set the default config only if the config is different
if(!config.getRealmFileName().equals(Realm.getDefaultInstance().getConfiguration().getRealmFileName())){
                    Realm.setDefaultConfiguration(config);
                }
            }
            catch (Exception e){
                Realm.setDefaultConfiguration(config);
            }

1 个答案:

答案 0 :(得分:3)

问题是您正在创建RealmMigration2类的两个实例。如果你没有在你的班级中重写等于:

RealmMigration migration1 = new RealmMigration2();
RealmMigration migration2 = new RealmMigration2();

migration1.equals(migration2) == false

这会导致RealmConfigurations的比较失败。

因此,您应该将RealmMigration实例设为单例或覆盖hashCode() / equals()