반응형
Room Database는 기본적으로 Map과 같은 복잡한 타입을 직접 지원하지 않기 때문에, 따로 JSON 문자열로 변환하고 저장해야한다.
1. TypeConverter작성
import androidx.room.TypeConverter
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
class MapTypeConverter {
@TypeConverter
fun fromString(value: String): Map<String, String> {
val mapType = object : TypeToken<Map<String, String>>() {}.type
return Gson().fromJson(value, mapType)
}
@TypeConverter
fun fromMap(map: Map<String, String>): String {
val gson = Gson()
return gson.toJson(map)
}
}
2. Room 데이터베이스에 Converter 등록
import androidx.room.Database
import androidx.room.RoomDatabase
import androidx.room.TypeConverters
@Database(entities = [YourEntity::class], version = 1)
@TypeConverters(MapTypeConverter::class)
abstract class AppDatabase : RoomDatabase() {
// ...
}
3. Entity생성
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity
data class YourEntity(
@PrimaryKey val id: Int,
val mapField: Map<String, String>
// 다른 필드들...
)
4. Dao 작성
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
@Dao
interface YourEntityDao {
@Insert
fun insert(entity: YourEntity)
@Query("SELECT * FROM YourEntity WHERE id = :id")
fun getById(id: Int): YourEntity
}
이렇게하면 Map<String,String> 형태의 타입을 Room 데이터베이스에 저장하고 검색할 수 있습니다.
JSON 변환을 위해 Gson 라이브러리를 사용 했습니다.
반응형
'Android' 카테고리의 다른 글
Android constraint layout id 중복으로 사용하기 (0) | 2024.02.27 |
---|---|
Android Room DB 간단한 메모DB 만들어보기 + 주의할점 (0) | 2024.01.05 |
The project is using an incompatible version (AGP 8.1.2) of the Android Gradle plugin. Latest supported version is AGP 8.0.2 (0) | 2023.11.25 |
Kotlin 최대공약수 최소공배수 구하기 (0) | 2023.11.14 |
Android WorkManager Example 안정적인 작업 처리하기 (0) | 2023.11.08 |
댓글