【问题标题】:Multiple realm db's in one application一个应用程序中的多个领域数据库
【发布时间】:2025-11-28 18:50:01
【问题描述】:

我想在我的应用程序中添加第二个 Realm 数据库。第一个是通过解压缩我的应用程序中已经提供的领域文件创建的。我已经设置了指向这个的配置。

如何添加第二个 Realm 数据库?两个数据库相互独立。我创建了 SecondRealm 类扩展领域对象。

已遵循以下内容: Realm: Use one or multiple realms in an app (and one or multiple schemas)

但我得到:

io.realm.exceptions.RealmMigrationNeededException: Migration is required due to the following errors:
-Class 'SecondRealm' has been added
 at io.realm.internal.OsSharedRealm.nativeGetSharedRealm(Native Method)
        at io.realm.internal.OsSharedRealm.<init>(OsSharedRealm.java:171)
        at io.realm.internal.OsSharedRealm.getInstance(OsSharedRealm.java:241)
        at io.realm.BaseRealm.<init>(BaseRealm.java:136)
        at io.realm.BaseRealm.<init>(BaseRealm.java:105)
        at io.realm.Realm.<init>(Realm.java:164)
        at io.realm.Realm.createInstance(Realm.java:435)
        at io.realm.RealmCache.doCreateRealmOrGetFromCache(RealmCache.java:342)
        at io.realm.RealmCache.createRealmOrGetFromCache(RealmCache.java:282)
        at io.realm.Realm.getInstance(Realm.java:364)

【问题讨论】:

    标签: android realm


    【解决方案1】:

    Realm 会自动生成一个 DefaultRealmModule,其中包含当前模块中使用 @RealmClass 注释的每个类(因此包括扩展 RealmObject 的类)。

    如果这不是您需要的架构,那么您需要为给定的 RealmConfigurations 定义您自己的 RealmModule 来描述您要打开的给定 Realm 文件的架构。

    @RealmModule(library = false, classes=[FirstRealm::class.java])
    data class FirstModule(val placeholder: String) { // empty data class for equals/hashcode
        constructor(): this("")
    }
    
    @RealmModule(library = false, classes=[SecondRealm::class.java])
    data class SecondModule(val placeholder: String) { // empty data class for equals/hashcode
        constructor(): this("")
    }
    
    val firstConfig = RealmConfiguration.Builder()
                          .name("first.realm")
                          .modules(FirstModule())
                          .build()
    
    val secondConfig = RealmConfiguration.Builder()
                          .name("second.realm")
                          .modules(SecondModule())
                          .build()
    
    val realm1 = Realm.getInstance(firstConfig)
    val realm2 = Realm.getInstance(secondConfig)
    

    【讨论】: