Android Kotlin Volley如何发送JSON数据



我想使用Volley发送JSON有效负载到REST API。但是我得到了一个错误

"com.android.volley。ParseError: org.json.JSONException: Value[]类型的org.json.JSONArray不能转换为JSONObject">

Magento的有效载荷https://devdocs.magento.com/guides/v2.4/rest/tutorials/inventory/create-cart-add-products.html

JSON载荷

{
"cartItem": {
"sku": "10-1001",
"qty": 5,
"quote_id": "3"
}
}

凌空抽射代码

// Create JSON
val itemsObject = JSONObject()
itemsObject.put("sku", "10-1001")
itemsObject.put("qty", 5)
itemsObject.put("quote_id", "3")
val itemsArray = JSONObject()
itemsArray.put("cartItem", itemsObject)

val jsonRequest = object : JsonObjectRequest(
Request.Method.POST, url, itemsArray,
Response.Listener { response ->
try {
binding.txtStatus.text = response.toString()
} catch (e: JSONException) {
e.printStackTrace()
binding.txtStatus.text = e.toString()
}
},
Response.ErrorListener { error ->
binding.txtStatus.text = error.toString()
}) {
@Throws(AuthFailureError::class)
override fun getBodyContentType(): String {
return "application/json"
}
override fun getHeaders(): Map<String, String> {
val apiHeader = HashMap<String, String>()
apiHeader["Authorization"] = "Bearer $cusToken"
return apiHeader
}
}
val queue = Volley.newRequestQueue(this@MainActivity)
queue.add(jsonRequest)

您应该使用JSONArray而不是JSONObject。您的itemsArray必须像这样:

val itemsArray = JSONArray()

你的请求负载必须像这样,并且可以有多个对象:

[
{
"sku":"10-1001",
"qty":5,
"quote_id":"3"
},
{
"sku":"10-1002",
"qty":1,
"quote_id":"2"
}
]

原因是有效负载现在包含多个项目。可以在JSONArray中添加多个JSONObject

另一种方法是,如果你想在请求有效负载中发送一些其他信息,那么你可能需要以以下方式使用:

{
"cartItems":[
{
"sku":"10-1001",
"qty":5,
"quote_id":"3"
},
{
"sku":"10-1002",
"qty":1,
"quote_id":"2"
}
],
"otherInfo":"sampleInfo"
}

最新更新