使用MongoDB时触发PD:15617错误,请求技术排查支持
问题:MongoDB Realm 初始化触发「无对应表」致命异常
导航至关联MongoDB的页面时,程序触发致命异常,核心错误为**RLM_ERR_NO_SUCH_TABLE: No such table exists**,完整错误日志如下:
FATAL EXCEPTION: main Process: com.example.groundzero, PID: 15617 java.lang.ExceptionInInitializerError at com.example.groundzero.mongodb.mongohomescreen.HomeViewModel$1.invokeSuspend(HomeViewModel.kt:27) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) at android.os.Handler.handleCallback(Handler.java:942) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7872) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936) Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@43b8bcc, Dispatchers.Main] Caused by: java.lang.IllegalArgumentException: [RLM_ERR_NO_SUCH_TABLE]: No such table exists at io.realm.kotlin.internal.interop.CoreErrorConverter.asThrowable(CoreErrorConverter.kt:42) at io.realm.kotlin.internal.interop.realmcJNI.realm_get_class(Native Method) at io.realm.kotlin.internal.interop.realmc.realm_get_class(realmc.java:558) at io.realm.kotlin.internal.interop.RealmInterop.realm_get_class-nILuwFE(RealmInterop.kt:304) at io.realm.kotlin.internal.schema.CachedSchemaMetadata.<init>(CachedClassKeyMap.kt:101) at io.realm.kotlin.internal.LiveRealmReference.<init>(RealmReference.kt:108) at io.realm.kotlin.internal.ConfigurationImpl.openRealm$suspendImpl(ConfigurationImpl.kt:108) at io.realm.kotlin.internal.ConfigurationImpl.openRealm(Unknown Source:0) at io.realm.kotlin.mongodb.internal.SyncConfigurationImpl.openRealm(SyncConfigurationImpl.kt:114) at io.realm.kotlin.internal.RealmImpl$1.invokeSuspend(RealmImpl.kt:107) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:280) at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:85) at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:59) at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source:1) at io.realm.kotlin.internal.platform.CoroutineUtilsSharedJvmKt.runBlocking(CoroutineUtilsSharedJvm.kt:22) at io.realm.kotlin.internal.platform.CoroutineUtilsSharedJvmKt.runBlocking$default(CoroutineUtilsSharedJvm.kt:21) at io.realm.kotlin.internal.RealmImpl.<init>(RealmImpl.kt:106) at io.realm.kotlin.internal.RealmImpl.<init>(Unknown Source:0) at io.realm.kotlin.internal.RealmImpl$Companion.create$io_realm_kotlin_library(RealmImpl.kt:263) at io.realm.kotlin.Realm$Companion.open(Realm.kt:82) at com.example.groundzero.mongodb.data.MongoDB.configureTheRealm(MongoDB.kt:40) at com.example.groundzero.mongodb.data.MongoDB.<clinit>(MongoDB.kt:26) ... 11 more
解决方案
- 检查Realm模型类配置:确认
configureTheRealm方法中,Realm配置的schema包含了所有需要使用的模型类,没有遗漏对应表的实体定义。 - 同步服务器端Schema:如果使用MongoDB Realm同步功能,要保证客户端模型类的类名、字段名、字段类型和服务器端Realm App的Schema完全一致,服务器端必须存在对应表的定义。
- 清理本地旧Realm文件:测试环境下可以直接删除应用数据,生产环境需要添加Schema迁移逻辑,避免旧的不匹配数据库文件导致初始化失败。
- 规范初始化时机:确保
Realm.open在正确的协程环境中执行,避免在主线程阻塞调用;同时检查静态初始化块(如MongoDB类的<clinit>)中的逻辑,确保初始化流程没有提前触发或出现异常。 - 验证模型类注解:确认所有Realm模型类都正确添加了
@RealmClass注解并继承RealmObject,字段的@PrimaryKey等注解配置无误,保证Schema能正确生成。
内容的提问来源于stack exchange,提问作者Josef M
相关产品推荐
相关产品推荐

