@Entity(tableName = "run_table")
data class Run(
var image: Bitmap? = null,
var timestamp: Long = 0L,
var avgSpeedInKMH: Float = 0f,
var distanceInMeters: Int = 0,
var timeInMillis: Long = 0,
var caloriesBurned: Int = 0
) {
@PrimaryKey(autoGenerate = true)
var id: Int? = null
}
데이터베이스에 저장하기 위한 엔티티를 만들어주고,
class Converters {
// Bitmap -> ByteArray 변환
@TypeConverter
fun toByteArray(bitmap : Bitmap) : ByteArray{
val outputStream = ByteArrayOutputStream()
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream)
return outputStream.toByteArray()
}
// ByteArray -> Bitmap 변환
@TypeConverter
fun toBitmap(bytes : ByteArray) : Bitmap{
return BitmapFactory.decodeByteArray(bytes, 0, bytes.size)
}
}
컨버터 클래스를 만들어준다.
여기서 @TypeConverter 어노테이션을 사용해준다.
@TypeConverter 을 사용하면 데이터베이스에서 자동으로 그 자료형에 맞는 메소드를 호출한다.
toByteArray는 비트맵을 바이트로 바꾸기 위한 메소드이고
toBitmap은 다시 비트맵으로 바꾸기 위한 메소드이다.
이미지를 저장할 때 toByteArray 를 통해 ByteArray 형태로 저장되어있다가
이미지를 불러올 때 toBitmap 를 통해 Bitmap의 형태가 되는 것이다.
/* entities = 사용할 엔티티 선언, version = 엔티티 구조 변경 시 구분해주는 역할
exportSchema = 스키마 내보내기 설정 */
@Database(entities = [Run::class], version = 1, exportSchema = false)
@TypeConverters(Converters::class)
abstract class RunDatabase : RoomDatabase() {
abstract fun runDao() : RunDao
}