Android项目Room数据库报错导致kaptDebugKotlin任务执行失败如何解决
问题原因
- 实体类
com.aditya.cheezycoderetrofitdemo.Result未添加Room要求的@Entity注解,且类中没有至少一个字段标注@PrimaryKey,Room无法识别该类为数据库实体。 QuoteDatabase的@Database注解配置中,未将Result类加入entities数组,导致Room无法将该类和DAO中操作的表关联。- DAO层写的SQL语句存在语法错误,要么是表名和实体指定的表名不一致,要么是语句中存在多余的符号(比如多余的括号)触发语法校验失败。
解决方案
- 第一步:给
Result类补全Room注解,确保表名和DAO中查询的表名一致,同时添加主键:
// 对应你要存储的Result实体类 @Entity(tableName = "quote") data class Result( // 按需选择自增主键或者业务主键 @PrimaryKey(autoGenerate = true) val localId: Int = 0, // 以下为你原本的业务字段 val quote: String, val author: String, // ...其余字段 )
- 第二步:修正
QuoteDatabase的配置,将Result类加入实体列表:
@Database( // 把Result类加入entities数组,之前配置漏了这个 entities = [Result::class], version = 1, // 如果是测试阶段不需要导出schema可以设为false exportSchema = false ) abstract class QuoteDatabase : RoomDatabase() { abstract fun getQuoteDao(): QuoteDAO }
- 第三步:检查
QuoteDAO中的所有SQL语句,修正语法和表名问题,示例参考:
@Dao interface QuoteDAO { // 确保表名和@Entity中指定的quote一致,语句没有多余括号 @Query("SELECT * FROM quote") suspend fun getQuotes(): List<Result> @Insert suspend fun addQuote(quote: Result) }
- 第四步:清理构建缓存后重新编译项目,在Android Studio中依次点击
Build -> Clean Project,再点击Rebuild Project即可。
内容的提问来源于stack exchange,提问作者Aditya Vyas-Lakhan
相关产品推荐
相关产品推荐

