2020年2月7日 星期五

Android room migration with new table and column not primitive type

最近 room 的 Migration 是新增一個 table


@Entity
@TypeConverters(RolesConverter::class)
data class BikePositionRoom(
    @PrimaryKey
    val id: String = UUID.randomUUID().toString(),
    var city: String,
    var positionName: String,
    var latLng: LatLng,
    var available: Int? = null,
    var total: Int? = null
)

裡面有個參數是 LatLng 類別,一時間在 room 的 MIGRATION 的類型不知道怎麼填

最後回頭看一下 TypeConverter 有寫到轉換的類型


 @TypeConverter
    fun stringToLatlng(value: String): LatLng {
        return gson.fromJson(value, LatLng::class.java)
    }
    @TypeConverter
    fun latlngToString(latLng: LatLng): String {
        return gson.toJson(latLng)
    }

於是推理最後存到 db 的應該是 string 型態,所以最後


val MIGRATION_1_2: Migration = object : Migration(1, 2) {
    override fun migrate(database: SupportSQLiteDatabase) {
        database.execSQL(
            "CREATE TABLE IF NOT EXISTS BikePositionRoom(id TEXT NOT NULL, city TEXT NOT NULL, positionName TEXT NOT NULL,  latLng TEXT NOT NULL,available INTEGER, total INTEGER, PRIMARY KEY(id))"
        )
    }
}

順利 Migration

可喜可賀!
可喜可賀!


沒有留言:

張貼留言