已添加room-ktx依赖 Room使用suspend方法仍报参数需@Entity类错误
问题原因
- 核心原因是你当前使用的
2.3.0版本的Room,与项目中引入的1.6.0-RC高版本协程存在兼容性缺陷。Room 2.4.0以下版本的注解处理器(kapt)处理带suspend关键字的Dao方法时,会误将协程底层自动生成的Continuation参数识别为Dao方法的业务入参,因此抛出「参数必须是@Entity注解类或其集合/数组」的错误。 - 次要排查点:如果根目录build.gradle中的Kotlin插件版本低于1.5.30,也可能和高版本协程、Room注解处理器产生适配问题。
解决方案
- 优先升级Room版本到2.4.0及以上稳定版,可直接修复suspend函数适配问题,修改模块级build.gradle中的roomVersion配置即可:
def roomVersion = "2.5.0"
升级后先执行Clean Project再Rebuild Project,清除之前的kapt缓存即可解决报错。
- 同步核对根目录build.gradle中的Kotlin插件版本,建议升级到1.6.0及以上,和项目使用的协程版本匹配:
plugins { id 'com.android.application' version '7.2.0' apply false id 'com.android.library' version '7.2.0' apply false id 'org.jetbrains.kotlin.android' version '1.6.0' apply false }
- 临时解决方案(不推荐):如果暂时无法升级Room版本,可去掉Dao方法的
suspend关键字,将方法放到协程的IO调度器中手动调用,避开注解处理器的适配缺陷。
内容的提问来源于stack exchange,提问作者Kaushik Sarmah
相关产品推荐
相关产品推荐

