Android Room 2.3.0 Kotlin环境下DAO层Delete查询编译错误
Android Room 2.3.0 协程DAO编译错误解决方案
错误根因
你遇到的所有编译报错本质是Room注解处理器未识别DAO方法的suspend关键字,将协程编译自动生成的kotlin.coroutines.Continuation参数识别为了DAO的数据库操作参数,因此触发了参数类型非法、返回值不支持等错误。
解决方案
按优先级依次尝试以下操作:
- 检查Room依赖完整性
Room 2.3.0要支持suspend语法必须引入room-ktx扩展包,检查Module级build.gradle的依赖配置是否完整,示例配置如下:dependencies { // Room基础依赖 implementation "androidx.room:room-runtime:2.3.0" kapt "androidx.room:room-compiler:2.3.0" // 协程支持必须添加的依赖 implementation "androidx.room:room-ktx:2.3.0" } - 检查Kotlin版本兼容性
Room 2.3.0最高适配Kotlin 1.5.x版本,如果你近期升级了Kotlin到1.6.0及以上版本,就会出现suspend识别失败的问题。两种修复方案二选一:- 将Kotlin版本回退到1.5.32
- 将Room版本升级到2.4.0及以上,新版本已适配高版本Kotlin
- 检查kapt插件配置
Module级build.gradle顶部必须先声明kotlin-kapt插件才能正确处理Room的注解,示例配置:// 顶部插件声明部分必须包含这行 plugins { id 'com.android.application' id 'kotlin-android' id 'kotlin-kapt' // 必须添加,且位置不能错 } - 清理缓存重建
缓存异常也会引发偶发编译错误,依次执行以下操作即可:- 点击菜单栏
Build -> Clean Project清理项目 - 点击菜单栏
File -> Invalidate Caches...选择Invalidate and Restart重启Android Studio - 重启后重新编译项目
- 点击菜单栏
内容的提问来源于stack exchange,提问作者JamieRhys
相关产品推荐
相关产品推荐

