我对 Realm 和他的方法 setDefaultConfiguration 有疑问。 事实上,我的应用程序是多用户的,我需要在多个 Realm 配置之间切换。
在主要 Activity 加载期间,我像这样配置 Realm 配置:
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 返回一个错误,因为没有设置默认实例。
我正在转身,因为在设置之前无法测试 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);
}
最佳答案
问题是您正在创建 RealmMigration2
类的两个实例。如果你不在你的类(class)中重写 equals:
RealmMigration migration1 = new RealmMigration2();
RealmMigration migration2 = new RealmMigration2();
migration1.equals(migration2) == false
这会导致RealmConfigurations的比较失败。
因此,您应该使您的 RealmMigration 实例成为单例或覆盖 hashCode()
/equals()
。
关于setDefaultConfiguration 的 Android Realm 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35273326/