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

如何解决Android Kotlin中Volley发送JSON格式错误的问题

解决方案

问题根因

  • 你当前重写的getParams()是Volley用于提交application/x-www-form-urlencoded表单格式的方法,不会输出标准JSON结构
  • 直接调用集合/对象的toString()返回的是JVM默认的对象字符串格式,不是序列化后的标准JSON,所以会出现Id=1233而非"Id":"1233"的异常格式

修复步骤

方案1:使用系统自带org.json库构造JSON(无需额外依赖)

  1. 先构造符合格式的JSON对象
// 构造外层JSON对象
val requestJson = JSONObject()
requestJson.put("Id", "1233")

// 构造SelRefids对应的JSON数组
val refidsJsonArray = JSONArray()
payarray.forEach { item ->
    val refItemJson = JSONObject()
    refItemJson.put("Refno", item.refno) // 替换为你payarray元素对应的属性取值
    refItemJson.put("H_dt", item.hDt) // 替换为你payarray元素对应的属性取值
    refidsJsonArray.put(refItemJson)
}
requestJson.put("SelRefids", refidsJsonArray)
  1. 自定义Volley请求,重写getBody和ContentType,不要使用getParams()
val jsonRequest = object : JsonObjectRequest(
    Method.POST,
    "你的接口地址",
    null,
    { response ->
        // 接口成功回调逻辑
    },
    { error ->
        // 接口失败回调逻辑
    }
) {
    // 返回JSON格式的请求体
    override fun getBody(): ByteArray {
        return requestJson.toString().toByteArray(Charsets.UTF_8)
    }

    // 声明请求体格式为JSON
    override fun getBodyContentType(): String {
        return "application/json; charset=utf-8"
    }

    // 如有请求头要求可重写该方法添加
    override fun getHeaders(): MutableMap<String, String> {
        val headers = HashMap<String, String>()
        // headers["Authorization"] = "Bearer 你的鉴权token"
        return headers
    }
}

// 将请求添加到Volley队列
Volley.newRequestQueue(context).add(jsonRequest)

方案2:使用Gson序列化(更简洁,适合复杂结构)

  1. 先定义请求参数对应的数据类
data class PostBody(
    val Id: String,
    val SelRefids: List<RefItem>
)

data class RefItem(
    val Refno: String,
    val H_dt: String
)
  1. 构造请求对象并序列化
// 构造请求参数,payarray只要是符合RefItem结构的集合即可
val postBody = PostBody(Id = "1233", SelRefids = payarray)
// Gson序列化得到标准JSON字符串
val jsonStr = Gson().toJson(postBody)
  1. 后续Volley请求的getBody()直接返回jsonStr.toByteArray(Charsets.UTF_8)即可,其余逻辑和方案1一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:36:06