버그 잡이

Room에서 List 사용하기 #Kotlin #TypeConverter #Android 본문

안드로이드

Room에서 List 사용하기 #Kotlin #TypeConverter #Android

버그잡이 2020. 4. 23. 20:02

Room에서 다음과 같이 선언하면 그냥 쓸 수 있을 줄 알았다.

 

 @ColumnInfo(name = "word_list")
    var wordList: List<Word> ?= null

 

하지만 다음과 같이 선언하고 build를 시작하면 error가 뜬다.

에러내용은 "typerConverter를 사용할 것을 고려해봐라" 이다.

 

 

그래서 TypeConverter에 관해 찾아보니 다음 글을 찾을 수 있었다.

 

 https://stackoverflow.com/questions/44986626/android-room-database-how-to-handle-arraylist-in-an-entity

 

 

 

방법은 아래와 같다.

 

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 형태를 이용하자.

반응형
Comments