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

Room转换器类多参数问题:如何转换含经纬度的Coord类

解决Room TypeConverter单参数限制下Coord类的完整双向转换问题

要在单参数限制下完整保留Coord类的纬度(lat)和经度(lon)信息,核心思路是将Coord对象序列化为**单一字符串(如JSON格式)**进行存储,反向转换时再将字符串反序列化为Coord对象,避免数据丢失。

方案1:使用Gson实现序列化/反序列化

这是Android中最常用的方案,步骤如下:

  1. 添加Gson依赖(项目未引入时):
    在Module级别的build.gradle的dependencies块中添加:

    implementation 'com.google.code.gson:gson:2.10.1'
    
  2. 修改TypeConverter类:

    class CoordConverter {
        @TypeConverter
        fun fromCoordToString(coord: Coord): String {
            return Gson().toJson(coord)
        }
    
        @TypeConverter
        fun fromStringToCoord(jsonString: String): Coord {
            return Gson().fromJson(jsonString, Coord::class.java)
        }
    }
    
  3. 在Room数据库类中注册转换器:
    确保你的Room Database类添加@TypeConverters注解指定转换器:

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

方案2:使用Kotlinx Serialization(无第三方库依赖)

若不想引入Gson,可使用Kotlin官方序列化库:

  1. 添加Kotlinx Serialization依赖:
    在Module级别的build.gradle中配置:

    plugins {
        id 'org.jetbrains.kotlin.plugin.serialization' version '1.9.20'
    }
    
    dependencies {
        implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0"
    }
    
  2. 为Coord类添加序列化注解:

    @Keep
    @Serializable
    data class Coord(
        var lat: Double = .0,
        var lon: Double = .0
    )
    
  3. 实现TypeConverter:

    class CoordConverter {
        private val json = Json { ignoreUnknownKeys = true }
    
        @TypeConverter
        fun fromCoordToString(coord: Coord): String {
            return json.encodeToString(coord)
        }
    
        @TypeConverter
        fun fromStringToCoord(jsonString: String): Coord {
            return json.decodeFromString(jsonString)
        }
    }
    

原理说明

两种方案均通过将Coord对象转换为单一字符串类型,满足Room TypeConverter单参数要求,同时JSON格式能完整保留lat和lon的所有数据,反向转换时可完整恢复对象,不会丢失任何字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 17:48:08