我遇到了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);
}
答案 0 :(得分:3)
问题是您正在创建RealmMigration2
类的两个实例。如果你没有在你的班级中重写等于:
RealmMigration migration1 = new RealmMigration2();
RealmMigration migration2 = new RealmMigration2();
migration1.equals(migration2) == false
这会导致RealmConfigurations的比较失败。
因此,您应该将RealmMigration实例设为单例或覆盖hashCode()
/ equals()
。