안드로이드
Room에서 List 사용하기 #Kotlin #TypeConverter #Android
버그잡이
2020. 4. 23. 20:02
Room에서 다음과 같이 선언하면 그냥 쓸 수 있을 줄 알았다.
@ColumnInfo(name = "word_list")
var wordList: List<Word> ?= null
하지만 다음과 같이 선언하고 build를 시작하면 error가 뜬다.
에러내용은 "typerConverter를 사용할 것을 고려해봐라" 이다.
그래서 TypeConverter에 관해 찾아보니 다음 글을 찾을 수 있었다.
방법은 아래와 같다.
1. Converter 클래스를 만든다.
- 해당 data 클래스와 같은 파일에 만들던 다른 곳에 만들던 상관없다.
- 아래 클래스는 Gson을 list를 json으로 , json을 list로 바꿔주는 converter이다. (*Gson 라이브러리를 추가해야한다.)
- Room에 저장될때는 json으로 바꿔주고 불러올때는 list로 바꿔주는 것 같다.
class Converters {
@TypeConverter
fun listToJson(value: List<Word>?) = Gson().toJson(value)
@TypeConverter
fun jsonToList(value: String) = Gson().fromJson(value, Array<Word>::class.java).toList()
}
2. DB 클래스에 converter 추가
- @TypeConverters(Converters::class) 이거 한줄 추가해주면 된다.
@Database(entities = arrayOf(Alarm::class), version = 4)
@TypeConverters(Converters::class)
abstract class AlarmDB : RoomDatabase(){
}
+
나는 원래 arraylist형태를 저장하고 싶었는데 이것은 지원해주지 않는 것 같다. room에 저장할 경우에는 list 또는 array 형태를 이용하자.
반응형