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

Kotlin 1.6升级后Android Room协程suspend DAO方法返回类型转换错误

Kotlin 1.6升级后Room DAO suspend查询方法报错解决方案

根因说明

该问题由Room版本与Kotlin 1.6的兼容性问题导致。Kotlin 1.6调整了挂起函数的字节码生成规则,2.4.0以下版本的Room无法正确识别suspend修饰的DAO方法的返回类型,因此抛出无法将Cursor转换为Object类型的错误。

可行解决方案

  • 方案1(优先推荐):升级Room版本到2.4.0及以上
    修改项目依赖配置即可,无需调整原有DAO代码,参考gradle配置:
dependencies {
    def room_version = "2.5.0"
    implementation "androidx.room:room-runtime:$room_version"
    kapt "androidx.room:room-compiler:$room_version"
    implementation "androidx.room:room-ktx:$room_version"
}

如果项目使用KSP替代KAPT做注解处理,将compiler的依赖替换为ksp "androidx.room:room-compiler:$room_version"即可。

  • 方案2(临时兼容):回退Kotlin挂起函数字节码规则
    如果暂时无法升级Room版本,可在模块级build.gradle中添加编译器参数,复用Kotlin 1.5的字节码生成逻辑:
kotlinOptions {
    freeCompilerArgs += [
        "-Xno-optimized-callable-references",
        "-Xuse-old-inner-classes-logic"
    ]
}

该方案为临时兼容手段,后续仍建议升级Room版本避免其他潜在兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:24:05