728x90
원인
Room이 필드 타입을 인식하지 못해서 발생하는 문제, 보통 코틀린의 Basic Type이 아닌 직접 만든 데이터 클래스 리스트를 사용할 때 발생
- Entity 클래스
@Entity(tableName = "checklist")
data class CheckListEntity(
@ColumnInfo(name = "checklist_info") var checkLists: List<CheckListInfo>
){
@PrimaryKey(autoGenerate = true)
var idx: Long = 0
}
- 데이터 클래스
data class CheckListInfo(
//할 일
var checklistContent: String,
//초기화 요일
var restartWeek: Set<DayOfWeek>,
//수행여부
var done: Boolean = false,
//애니메이션 visivle
var visibility: MutableState<Boolean> = mutableStateOf(true)
)
해결
TypeConverter를 추가해주면 된다.
간단히 소개하자면 Room이 인식할 수 없는 타입을 Json으로 변경해서 저장하고 다시 불러올 땐 원래 타입으로 바꿔주는 역할을 한다.
class CheckListConverters {
@TypeConverter
fun listToJson(value: List<CheckListInfo>): String?{
return Gson().toJson(value)
}
@TypeConverter
fun jsonToList(value: String): List<CheckListInfo> {
val listType = object: TypeToken<List<CheckListInfo>>(){}.type
return Gson().fromJson(value, listType)
}
}
jsonToList에서 TypeToken을 쓴 이유는 Json을 원래 타입으로 되돌릴 때 해당하는 타입이 필요하기 때문이다.
Gson().fromJson(value, List<CheckListInfo>)
None of the following functions can be called with the arguments supplied.
지정된 아규먼트만 올 수 있음
안쓰면 오류 뜬다.
728x90