gpt4 book ai didi

android - Moshi 在浮点值处崩溃

转载 作者:行者123 更新时间:2023-12-02 12:46:27 27 4
gpt4 key购买 nike

我有这个模型类

data class RvRange(val low: Int?, val high: Int?)

我的 JSON 响应是
{"low":60799.999999999985,"high":168800.00000000003}

我希望 Moshi 自动将这些浮点/ double 值转换为 Int,但它崩溃了。
这个问题有什么解决办法吗?

最佳答案

一种可能的解决方案是创建您自己的适配器,在内部转换 DoubleInt .例子:

object RvRangeAdapter : JsonAdapter<RvRange>() {

@FromJson
override fun fromJson(reader: JsonReader): RvRange? {
reader.beginObject()

var low: Int? = null
var high: Int? = null
while (reader.hasNext()) {
when (reader.nextName()) {
"low" -> low = reader.nextDouble().roundToInt() // or any other kind of rounding logic
"high" -> high = reader.nextDouble().roundToInt()
else -> reader.skipValue() // let's ignore unknown fields
}
}
reader.endObject()

return RvRange(low, high)
}

@ToJson
override fun toJson(writer: JsonWriter, value: RvRange?) {
writer.beginObject()
.name("low").value(value?.low)
.name("high").value(value?.high)
.endObject()
}
}

完成后,您需要注册该适配器,以便 Moshi 知道它可以使用:
val moshi: Moshi = Moshi.Builder()
.add(RvRange::class.java, RvRangeAdapter)
// any other configuration here
.build()

解析您提供的 JSON 时,反序列化的值将是:
RvRange(low=60800, high=168800)

请注意,它实际上不适用于 null值,所以如果 null 需要更多的调整是“高”和/或“低”的有效值。

关于android - Moshi 在浮点值处崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58802218/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com