You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用TypeConverter在Room数据库中存储Map类型数据?

实现Room的Map类型TypeConverter

Room本身不支持直接存储Map类型,需要通过TypeConverter将其转换为数据库支持的类型(比如JSON字符串)来存储,读取时再转换回Map。下面是具体实现方案:

方法一:使用Gson序列化(主流方案)

1. 添加Gson依赖

在Module级别的build.gradle中添加Gson依赖:

dependencies {
    implementation 'com.google.code.gson:gson:2.10.1'
}

2. 实现TypeConverter类

创建MyConverter类,编写双向转换方法:

import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import androidx.room.TypeConverter

class MyConverter {
    private val gson = Gson()

    // 将Map<String, Float>转为JSON字符串
    @TypeConverter
    fun mapToString(map: Map<String, Float>?): String? {
        return map?.let { gson.toJson(it) }
    }

    // 将JSON字符串转回Map<String, Float>
    @TypeConverter
    fun stringToMap(json: String?): Map<String, Float>? {
        // 使用TypeToken获取泛型类型,避免Gson解析时丢失泛型信息
        val mapType = object : TypeToken<Map<String, Float>>() {}.type
        return json?.let { gson.fromJson(it, mapType) }
    }
}

方法二:使用Kotlinx Serialization(Kotlin官方序列化库)

1. 添加依赖与插件

在Module级别的build.gradle中配置:

plugins {
    id 'org.jetbrains.kotlin.plugin.serialization' version '1.9.0'
}

dependencies {
    implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1'
}

2. 实现TypeConverter类

import androidx.room.TypeConverter
import kotlinx.serialization.encodeToString
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json

class MyConverter {
    private val jsonSerializer = Json.Default

    @TypeConverter
    fun mapToString(map: Map<String, Float>?): String? {
        return map?.let { jsonSerializer.encodeToString(it) }
    }

    @TypeConverter
    fun stringToMap(jsonStr: String?): Map<String, Float>? {
        return jsonStr?.let { jsonSerializer.decodeFromString(it) }
    }
}

注意事项

  • 你已经在数据库类myDb上添加了@TypeConverters(MyConverter::class),这会让整个数据库都能使用该转换器,实体类dbtable字段上的@TypeConverters注解可以选择性保留(不影响功能)。
  • 两个转换方法都处理了null的情况,避免空指针异常。

完成以上实现后,你就可以正常调用DAO的test方法插入包含Map类型的实体数据了。

内容的提问来源于stack exchange,提问作者katowicenocom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:07:25