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

Kotlin Android Room报Cannot find setter for field错误求助

问题根源定位

你遇到的Cannot find setter for field. - value in java.lang.String报错核心来自Dao层的查询方法配置错误,次要问题存在SQL语法错误,具体修复步骤如下:

  1. 修正查询方法返回值
    你在PixelArtCreationsDao中定义的getAllPixelArtCreations方法写了String返回类型,但SELECT * FROM PixelArts查询的是整张PixelArts表的所有记录,Room需要将查询结果映射为PixelArts实体的集合,无法自动转为String,才会抛出找不到String类对应字段setter的异常。
    修改该方法代码如下:
@Query("SELECT * FROM PixelArts ")
suspend fun getAllPixelArtCreations(): List<PixelArts>

后续赋值给AppData.pixelArtsData时调用toMutableList()转成可变列表即可:

AppData.pixelArtsData = AppData.db.pixelArtCreationsDao().getAllPixelArtCreations().toMutableList()
  1. 修正UPDATE语句语法错误
    UPDATE语句的SET子句中多个字段赋值需要用逗号分隔,不能使用AND,修改updatePixelArtCreation对应的查询注解:
@Query("UPDATE PixelArts SET item_pixel_data=:pixelData, item_bitmap=:bitmap WHERE id=:pixelArtId")
suspend fun updatePixelArtCreation(pixelArtId: Int, bitmap: String, pixelData: String)
  1. 可选补充配置(避免后续报错)
    你自定义的BitmapConverter、JsonConverter类型转换器需要注册到Room数据库类上,否则后续存取特殊类型字段时会抛出异常:
    在你继承RoomDatabase的PixelArtDatabase类上添加@TypeConverters注解:
@Database(entities = [PixelArts::class], version = 1)
@TypeConverters(BitmapConverter::class, JsonConverter::class)
abstract class PixelArtDatabase : RoomDatabase() {
    // 原有逻辑保留
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:45:03