개발/Android

Android Room Date Type에 대한 에러

지산동고라니 2023. 6. 9. 15:40
D:\wookhyun\android\compose\udemy\JetNoteApp\app\build\tmp\kapt3\stubs\debug\com\example\jetnoteapp\model\Note.java:19: error: Cannot figure out how to save this field into database. You can consider adding a type converter for it.
    private final java.util.Date date = null;

Room 데이터베이스를 공부하면서 위 에러를 볼 수 있었다. 안드로이드에서 활용할 수 있는 DB인 SQLite는 date 타입이 존재하지 않는다 따라서 어떻게 저장해야 할지 모르는 SQLite는 에러를 내뱉은 것이다.

 

이를 위해서 TypeConverter를 추가하면 Entitiy 변경 없이 활용할 수 있다

1.Converter 클래스를 생성한다.

package com.example.jetnoteapp.data

import androidx.room.TypeConverter
import java.util.Date

class Converters {
    @TypeConverter
    fun fromTimestamp(value: Long?): Date? {
        return value?.let { Date(it) }
    }
    @TypeConverter
    fun toTimestamp(value: Date?): Long? {
        return value?.let { value.time }
    }
}

2. TypeConverters 어노테이션과 함께 클래스를 지정해준다

@Database(entities = [Note::class], version = 1, exportSchema = false)
@TypeConverters(Converters::class) // <<-- add this line
abstract class NoteDatabase : RoomDatabase() {
    abstract fun noteDao(): NoteDatabaseDao
}