개발/Android
[프로젝트] 7일차 - Room ( Database )
레란희
2021. 9. 25. 14:33
리스트를 내부 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을 통한 DB 접속은 메인 스레드에서 실행될 수 없다.
따라서 코루틴을 사용하여 접근하였는데
CoroutineScope(Dispatchers.Main).launch {
var dataList: ArrayList<SaveDTO>? = null
CoroutineScope(Dispatchers.Default).async {
val db = AppDatabase.getInstance(context)
//DB에서 하는 일들
}.await()
//메인 스레드에서 하는 일들
}
이런 식으로 사용하였다.
이제 기본 기능은 얼추 완성된 것 같다.
남은 건 스샷찍어서 공유하는 것 뿐이려나..