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

如何为使用Moshi的API返回数据编写Room TypeConverter?

要给这些嵌套数据类编写Room TypeConverter,利用Moshi的序列化/反序列化能力即可,步骤如下:

1. 编写TypeConverter类

创建一个包含转换方法的类,用@TypeConverter注解标记每个转换函数,负责将自定义数据类与JSON字符串互转:

import com.squareup.moshi.Moshi
import androidx.room.TypeConverter

class WeatherTypeConverters {
    private val moshi = Moshi.Builder().build()

    // CurrentWeather ↔ JSON字符串 转换
    @TypeConverter
    fun currentWeatherToJson(currentWeather: CurrentWeather?): String? {
        return currentWeather?.let {
            moshi.adapter(CurrentWeather::class.java).toJson(it)
        }
    }

    @TypeConverter
    fun jsonToCurrentWeather(jsonString: String?): CurrentWeather? {
        return jsonString?.let {
            moshi.adapter(CurrentWeather::class.java).fromJson(it)
        }
    }

    // 若需单独处理WeatherCondition(比如它直接作为Entity字段),添加以下方法
    @TypeConverter
    fun weatherConditionToJson(condition: WeatherCondition?): String? {
        return condition?.let {
            moshi.adapter(WeatherCondition::class.java).toJson(it)
        }
    }

    @TypeConverter
    fun jsonToWeatherCondition(jsonString: String?): WeatherCondition? {
        return jsonString?.let {
            moshi.adapter(WeatherCondition::class.java).fromJson(it)
        }
    }
}

2. 将转换器关联到Room数据库

在你的RoomDatabase类上添加@TypeConverters注解,指定刚才编写的转换器类,这样Room就能识别并使用这些转换规则:

import androidx.room.Database
import androidx.room.RoomDatabase
import androidx.room.TypeConverters

@Database(entities = [WeatherResponse::class], version = 1)
@TypeConverters(WeatherTypeConverters::class)
abstract class WeatherDatabase : RoomDatabase() {
    // 声明你的DAO接口
    abstract fun weatherDao(): WeatherDao
}

关键说明

  • Moshi会自动处理嵌套的WeatherCondition对象,所以仅为CurrentWeather编写转换器就足够支持WeatherResponse的存储需求,除非WeatherCondition单独作为某个Entity的字段,才需要额外添加对应的转换方法。
  • 转换方法中处理了null值,避免空指针异常,符合Room对字段空值的处理逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 13:17:28