Android Kotlin Volley 如何发送 JSON 数据

Posted

技术标签:

【中文标题】Android Kotlin Volley 如何发送 JSON 数据【英文标题】:Android Kotlin Volley How to send JSON Data 【发布时间】:2021-11-05 22:35:29 【问题描述】:

我想使用 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)

【问题讨论】:

【参考方案1】:

您应该使用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"

【讨论】:

我无法更改负载类型,这是 Magento 负载 devdocs.magento.com/guides/v2.4/rest/tutorials/inventory/…

以上是关于Android Kotlin Volley 如何发送 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章

Android Kotlin Volley 如何从 JSONArray 中获取价值

Android kotlin解析器Gson Volley

Kotlin编程开发Android运用程序(Volley+Gson依赖库)

kotlin volley android POST 多部分/表单数据

如何纠正 android kotlin 发送格式错误的 JSON

Android Volley框架的几种post提交请求方式