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

在Kotlin中为Retrofit构建包含多元素数组的JSON对象时重复数据问题的解决方法

解决Kotlin中Retrofit JSON数组添加重复元素的问题

我明白你碰到的问题了——循环结束后arrayProducts里全是一模一样的元素,这可不是Retrofit的锅,问题出在你创建JsonObject的位置上!

你现在的代码里,objSubBuyNow是在循环外面创建的,每次循环只是修改这个对象的属性值,然后把同一个对象的引用添加到数组里。这就好比你只有一个盒子,每次把盒子里的东西换掉,然后把同一个盒子放进数组好几次,最后数组里的所有“盒子”其实都是同一个,自然显示的都是最后一次放进去的内容。

修正后的代码

把JsonObject的创建移到循环内部,每次循环都生成一个全新的对象:

val objBuyNow = JsonObject()
val arrayProducts = JsonArray()
for (i in 0 until response.arrList?.size!!) {
    // 关键:每次循环都新建一个JsonObject实例
    val objSubBuyNow = JsonObject()
    objSubBuyNow.addProperty("strProductId", response.arrList[i]?._id)
    Log.i("kaaa", response.arrList[i]?._id.toString())
    objSubBuyNow.addProperty("dblQty", response.arrList[i]?.dblQty)
    objSubBuyNow.addProperty("strSize", response.arrList[i]?.strSize)
    objSubBuyNow.addProperty("strColor", response.arrList[i]?.strColor)
    objSubBuyNow.addProperty("strName", response.arrList[i]?.strName)
    objSubBuyNow.addProperty("dblAmount", response.arrList[i]?.dblMRP)
    objSubBuyNow.addProperty("strImageUrl", response.arrList[i]?.strImageUrl)
    arrayProducts.add(objSubBuyNow)
}
objBuyNow.add("arrProducts", arrayProducts)

更简洁的写法(推荐)

用Kotlin的forEach和apply函数让代码更简洁易读:

val objBuyNow = JsonObject()
val arrayProducts = JsonArray().apply {
    response.arrList?.forEach { product ->
        val objSubBuyNow = JsonObject().apply {
            addProperty("strProductId", product?._id)
            addProperty("dblQty", product?.dblQty)
            addProperty("strSize", product?.strSize)
            addProperty("strColor", product?.strColor)
            addProperty("strName", product?.strName)
            addProperty("dblAmount", product?.dblMRP)
            addProperty("strImageUrl", product?.strImageUrl)
        }
        add(objSubBuyNow)
        product?._id?.let { Log.i("kaaa", it.toString()) }
    }
}
objBuyNow.add("arrProducts", arrayProducts)

这样修改后,每个商品都会对应一个独立的JsonObject,添加到数组里的都是不同的对象引用,自然就不会出现重复元素的问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 10:28:16