【问题标题】:How to set a fixed value for a item in Retrofit如何为 Retrofit 中的项目设置固定值
【发布时间】:2019-07-15 10:58:19
【问题描述】:

我有一个由改造填充的数据类。服务器 (API) 中没有 id 字段。所以我创建了一个val id 并为其分配了一些值,比如69。但是一旦我收到数据,id的值就不是69,而是0。请帮忙。

@Entity(tableName = "current_weather")
data class CurrentWeather(

    @SerializedName("last_updated_epoch")
    val lastUpdatedEpoch: Int,

// ... //

    @SerializedName("gust_kph")
    val gustKph: Float
) {
    @PrimaryKey(autoGenerate = false)
    var id: Int = 69
}

我什至尝试过这样做:

data class CurrentWeather(

    @PrimaryKey(autoGenerate = false)
    val id: Int = 69,
// ... //
)

【问题讨论】:

  • 是的,我已经读过,但这似乎不起作用。这也是在java中。你能帮我处理 kotlin 吗?
  • @AmitParameshwar : 可能CurrentWeather 对象包含id0
  • 我也是这么想的,但事实并非如此
  • 为什么需要{

标签: android kotlin retrofit2


【解决方案1】:

好的,这似乎是 GSON 的问题,与序列化和反序列化有关,因为它不正确支持 kotlin。阅读Gson Deserialization with Kotlin, Initializer block not called了解更多信息。

【讨论】:

    【解决方案2】:
    @Entity(tableName = "current_weather")
    data class CurrentWeather(
    
        @PrimaryKey(autoGenerate = false)
        val id: Int = 69,
    
        @SerializedName("last_updated_epoch")
        val lastUpdatedEpoch: Int,
    
        // ... //
    
    )
    

    更新。

    这是准备写入数据库的对象。 对于您的情况,您应该编写一个从 Retrofit 响应对象到数据实体数据类的映射器/转换器。

    【讨论】:

    • 不,它不起作用,我正在用改造填充数据类。并且响应中没有id 字段,我自己添加。这是问题的原因吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    • 2021-12-18
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    相关资源
    最近更新 更多