본문 바로가기
Android

Android Room Database Map 저장하기

by kkong93 2023. 12. 20.
반응형

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 라이브러리를 사용 했습니다.

반응형

댓글