Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- lifecyclescope
- 코틀린
- nav_graph
- Kotlin
- Imageview
- ROOM
- FRAGMENT
- ArrayList
- BottomSheetDialog
- button
- Android
- 안드로이드스튜디오
- firebasefunctions
- 팝업액티비티
- RealtimeDB
- Activity
- Dialog
- 밑줄
- 안드로이드 스튜디오
- 랜덤ID
- textview
- EditText
- firebase
- 뷰바인딩
- OutlinedButton
- 안드로이드
- ButtonWithButton
- MaterialButton
- ViewModel
- androidstudio
Archives
- Today
- Total
안드로이드 앱 개발
Room Database에 기본형이 아닌 데이터 타입으로 저장하기 feat. TypeConverter 본문
#1. 공식문서
https://developer.android.com/training/data-storage/room/referencing-data
Room은 기본 데이터 탕비을 SQLite 데이터베이스 테이블에 쉽게 저장할 수 있지만, 이외의 다른 타입은 문제가 생길 수 있다. Crime 클래스에는 Room이 저장 방법을 모르는 Date와 UUID 타입 속성이 있다. 따라서 이런 타입의 데이터를 데이터베이스 테이블에 저장하거나 가져오는 방법을 Room에게 알려주어야 한다.
이 때, 방법을 알려주는 것이 '타입 변환기'이다.
1. TypeConverter 클래스 생성
package com.example.criminalintent.database
import androidx.room.TypeConverter
import java.util.*
class CrimeTypeConverters {
@TypeConverter
fun fromDate(date: Date?): Long? {
return date?.time
}
@TypeConverter
fun toDate(millisSinceEpoch:Long?):Date?{
return millisSinceEpoch?.let{
Date(it)
}
}
@TypeConverter
fun toUUID(uuid:String?):UUID? {
return UUID.fromString(uuid)
}
@TypeConverter
fun fromUUID(uuid:UUID?):String? {
return uuid?.toString()
}
}
2. database 클래스에 어노테이션 추가
@Database (entities = [Crime::class], version = 1)
@TypeConverters(CrimeTypeConverters::class)
abstract class CrimeDatabase: RoomDatabase() {
abstract fun crimeDao() : CrimeDao
}
이렇게 하면, Room이 데이터를 꺼내고 저장할 때
TypeConverter를 활용해서 기본형이 아닌 데이터타입을 저장할 수 있다.
위 예제에서는 기본형이 아닌 Date, UUID 타입을 Crime 클래스가 가지고 있는데,
Date를 String으로, UUID를 String을 바꿔서 저장하고
또 가져올때는 역으로 TypeConverter를 사용한다.
'안드로이드앱' 카테고리의 다른 글
Repository Pattern (레포지터리 패턴) 데이터베이스에 접근하는 방법 (0) | 2021.07.16 |
---|---|
안드로이드에서 고유한 id 값 생성하는 방법 (0) | 2021.07.13 |
BottomNavigationView에서 Ripple 효과를 없애주고 싶다. (0) | 2021.07.08 |
Ted의 ImagePicker (0) | 2021.07.04 |
ScrollView VS NestedScrollView (0) | 2021.06.29 |