[ksp] java.lang.IllegalArgumentException: List has more than one element.

개배박발불지은만자·2024년 6월 3일
0
  1. 에러 : [ksp] java.lang.IllegalArgumentException: List has more than one element.라는 에러가 발생했을때
  2. 발생이유 : Room 에서 목록에 없는 타입이 사용되어 발생한다.
  • room db에서는 목록에 정의된 Int, Long, String, Boolean ... 등 자료형이 아니면 typeconverter 가 가능해야 하는데 그런게 없다면 이런 에러가 발생하는데 발생위치를 바로 지적하지 못하기 때문에 좀 찾아야 한다.
    내경우는 ULong 과 Long 으로 인해서 발생했다.
//.entity
@Entity(tableName = "date_box")
data class DateBoxEntity(
  @PrimaryKey(autoGenerate = false)
  val dateLong: Long,
  var color: ULong,
  var holiday: String,
  var luna: String,
  var memo: String,
  var work: String,
)

위 소스에서 var color: ULong,의 ULong 은 Room 에서 알지못하는 자료형이라 에러가 나서
ULong을 Long으로 변환하고 적용시 color.value = Color(value.color.toULong())이렇게 변환토록 했다.
아니면 TypeConvetor 로 ULong 과 Long을 변환토록 해봤는데 Error가 KSP가 먼저 접근해서 인지 에러가 고쳐지지 않았다.

//.converter

@TypeConverter
fun longToULong(value: Long): ULong = value.toULong()

@TypeConverter
fun uLongToLong(value: ULong): Long = value.toLong()

0개의 댓글