setDefaultConfiguration 的 Android Realm 问题

标签 android realm

我对 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/

相关文章:

android - RecyclerView 滚动问题(子项目彼此远离)

android - 没有附加功能的通知 throw Intent

android - 如何在android中从互联网获取当前时间

objective-c - 使用Realm数据填充UITableView(表格)?

android - Realm 迁移android addRealmObjectField

android - 处理多线程和 Realm 的正确方法是什么?

android - 信标 : Android/Iphone Bluetooth range

android - 同时滚动平行 View

ios - 我可以直接在对象数据模型中创建 realm.writes 吗?

Android Studio 4.1 数据库检查器不显示 Realm 数据库