리스트를 내부 DB에 저장하고 불러오게 하고 싶었다.

라떼는 SQLite에 직접 접근해서.. (이하 생략)

요즘은 세상이 좋아져서 Room이라는 걸로 대신해서 쓸 수 있는 모양이다.

 

Room을 이해하기 위해서는 RoomDatabase, Dao, Entity 이렇게 세 가지를 이해해야하는데

이것은 다른 사람의 블로그나 공식 문서를 보면 아주 잘 설명이 되어 있으니

굳이 내가 적지는 않겠다.

 

다만, 나의 경우 데이터 모델이

val idx: Int
var title: String
var items: Array<String>

처럼 Array를 포함하고 있었는데, 이 경우에는 DB에 Array를 JSON 타입으로 저장하여야 했다.

그리고 이를 위해 @TypeConverter, @TypeConverters 어노테이션을 이용하여야 했다.

 

이는 아래 블로그를 참고하기 바란다.

https://jinsangjin.tistory.com/56

 

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

Room에서 다음과 같이 선언하면 그냥 쓸 수 있을 줄 알았다. @ColumnInfo(name = "word_list") var wordList: List ?= null 하지만 다음과 같이 선언하고 build를 시작하면 error가 뜬다. 에러내용은 "typerConver..

jinsangjin.tistory.com

 

마지막으로 Room을 통한 DB 접속은 메인 스레드에서 실행될 수 없다.

따라서 코루틴을 사용하여 접근하였는데

 

CoroutineScope(Dispatchers.Main).launch {
    var dataList: ArrayList<SaveDTO>? = null
    CoroutineScope(Dispatchers.Default).async {
        val db = AppDatabase.getInstance(context)
        //DB에서 하는 일들
    }.await()
	//메인 스레드에서 하는 일들
}

이런 식으로 사용하였다.

 


이제 기본 기능은 얼추 완성된 것 같다.

남은 건 스샷찍어서 공유하는 것 뿐이려나..

+ Recent posts