You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用MongoDB组件崩溃:RLM_ERR_NO_SUCH_TABLE错误排查

崩溃排查求助:Realm数据库查询时提示“无对应表”导致应用崩溃

我已经定位到应用中的目标组件,点击按钮进入对应页面时应用崩溃,以下是相关代码及崩溃栈信息,恳请提供排查建议!

初始化代码

init {
    viewModelScope.launch(Dispatchers.Main) {
        MongoDB.getData().collect {
            data.value = it
        }
    }
}

获取数据组件代码

override fun getData(): Flow<List<Person>> {
    return realm.query<Person>().asFlow().map { it.list }
}

崩溃栈信息

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

排查建议

  • 检查Schema配置:确认Person实体类是否被正确纳入Realm的schema。如果用自动schema,确保Person类添加了@RealmClass注解,且Realm初始化时的配置包含该类。
  • 数据库版本与迁移:如果是版本更新后出现问题,检查configureTheRealm()里的数据库版本号,确认是否添加了对应迁移逻辑,让Realm能正确创建Person对应的表结构。
  • 初始化时机验证:崩溃发生在MongoDB的静态初始化块中,检查Realm实例的初始化是否在合适时机执行,避免在未完成初始化前发起查询。
  • 实体类定义检查:确认Person类符合Realm要求,比如字段不能是final(主键字段除外),且正确继承RealmObject或使用EmbeddedRealmObject(嵌入对象场景)。
  • 清理测试环境:开发环境下,尝试清理应用数据或重装应用,排除旧数据库文件损坏导致的表缺失问题。

内容的提问来源于stack exchange,提问作者Josef M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 18:24:56