在创建RealmConfiguration时,是否存在与Swift中的objectTypes参数等效的Java?https://realm.io/docs/swift/latest/api/Classes/Realm/Configuration.html
移植使用多个Realm数据存储的IOS应用程序将只读应用程序数据与读/写用户数据分开,因此我需要指定哪些模型属于哪个域以避免RealmMigrationNeededException,当realm可以&# 39;在第一个领域找到一个实际属于第二个领域的模型。
编辑:
好的,当我从RealmObject扩展一个新模型(TLGalleryItem)时,会出现以下异常,该模型将保存在第二个领域实例中。如果删除对模型的所有引用并从模型异常中移除RealmObject的继承就会消失。一旦我从RealmObject扩展模型(在代码中仍然没有引用它),我得到了这个:
04-23 08:43:35.603 26777-26777/com.(my project name).android.(my project name) E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.(my project name).android.(my project name), PID: 26777
java.lang.ExceptionInInitializerError
at com.(my project name).android.(my project name).activities.insightFinder.ThemesActivity.<init>(ThemesActivity.kt:23)
at java.lang.Class.newInstance(Native Method)
at android.app.Instrumentation.newActivity(Instrumentation.java:1173)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2708)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: io.realm.exceptions.RealmMigrationNeededException: Cannot open the read only Realm. 'TLGalleryItem' is missing.
at io.realm.Realm.<init>(Realm.java:179)
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)
at com.(my project name).android.(my project name).data.DBService.<clinit>(DBService.kt:21)
at com.(my project name).android.(my project name).activities.insightFinder.ThemesActivity.<init>(ThemesActivity.kt:23)
at java.lang.Class.newInstance(Native Method)
at android.app.Instrumentation.newActivity(Instrumentation.java:1173)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2708)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
答案 0 :(得分:1)
我无法在Android上说明如何操作,但通常不需要在iOS中设置Realm配置的objectTypes。我个人使用它,如果我有两个或更多的Realm配置,作为更安全的编码实践。如果我不小心调用了错误的Realm配置,它没有包含我想要的对象,而不是没有得到任何结果,我从Realm获得了一个有用的调试消息:&#34;对象类型xxxxx不是由Realm管理的。 #34;
我怀疑你的问题是由别的东西引起的。应该有一个更详细的调试日志,其中包含&#39; RealmMigrationNeededException&#39;错误。这是什么意思?
请记住,在开发过程中,如果您更改了Realm模型(并且没有为此设置迁移),则需要在构建和再次运行之前以某种方式删除Realm。在iOS上,我们从设备或模拟器中删除应用程序。
修改强>
有趣的发现。我明白你为什么要考虑objectTypes路线。理智检查:
Realm.setDefaultConfiguration()
不是线程安全的。请查看Download maven以获取更多线索。
答案 1 :(得分:1)
这回答了我的问题: https://stackoverflow.com/a/46609808/8902232
相关信息是:在RealmConfiguration中使用modules(...)。对我来说,Kotlin看起来像:
private val shippedRealmConfig = RealmConfiguration.Builder()
.name(Realm.DEFAULT_REALM_NAME)
.assetFile("shippedData.realm")
.schemaVersion(1)
.modules(ShippedModule())
.readOnly()
.build()
private val shippedRealm = Realm.getInstance(shippedRealmConfig)
@RealmModule(classes = arrayOf(TLTheme::class, TLSymptom::class, TLUnhelpfulBelief::class, TLInsight::class))
private class ShippedModule