android - Android Kotlin Volley 如何发送 JSON 数据
问题描述
我想使用 Volley 将 JSON 有效负载发送到 REST API。但我得到一个错误
“com.android.volley.ParseError: org.json.JSONException: 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"
}
]
原因是有效负载现在包含多个项目。您可以JSONObject
在JSONArray
.
另一种方法是,如果您想在请求有效负载中发送一些其他信息,那么您可能需要以下列方式使用:
{
"cartItems":[
{
"sku":"10-1001",
"qty":5,
"quote_id":"3"
},
{
"sku":"10-1002",
"qty":1,
"quote_id":"2"
}
],
"otherInfo":"sampleInfo"
}
推荐阅读
- math - 模糊数的乘法 (a> 0, b <0)
- c# - Image.FromFile("image_path") 抛出一些 JPEG 文件的内存不足异常
- java - 如何对齐 JPanel 在另一个 JPanel 下方居中?
- php - ErrorException 数组到字符串的转换 Laravel - 将 JSON 导入 MySQL
- workflow - 源限定符允许值超过 Informatica 中定义的大小
- c# - 可以在类型级别而不是单个 C# 属性设置器中添加验证吗?
- transliteration - 谷歌输入工具是否可用于网站输入翻译?
- spring - 春季数据 Redis。JPA Repository findBy 有时无法获取现有记录
- rust - 如何创建一个返回泛型类型的修改实例的泛型函数?
- node.js - 从 google doc api 返回时,为什么方程对象在 json 中为空?