【问题标题】:How to add Body in Url in Volley request in Kotlin?如何在 Kotlin 的 Volley 请求中在 Url 中添加 Body?
【发布时间】:2018-09-07 09:10:07
【问题描述】:

这是我的排球请求代码:-

    val searchRequest = object : JsonArrayRequest(Request.Method.GET,url,
            Response.Listener { response ->

                val result = response.toString()


            },
            Response.ErrorListener { error ->
                Toast.makeText(activity, "Error!",Toast.LENGTH_LONG)
                        .show()
                Log.d("ERROR",error.toString())
            })
    {
        override fun getBody(): ByteArray {

           //   TODO add Body, Header section works  //////////

            return super.getBody()
        }

        override fun getBodyContentType(): String {
            return "application/json"
        }


        override fun getHeaders() : Map<String,String> {
            val params: MutableMap<String, String> = HashMap()
            params["Search-String"] = songName
            params["Authorization"] = "Bearer ${accessTx.text}"
            return params
        }
    }
    AppController.instance!!.addToRequestQueue(searchRequest)

我想在正文部分添加此信息

video_id = "BDJIAH" , audio_quality = "256"

这是在以下部分中添加上述信息的示例。

{ "video_id":"ABCDE", “音频质量”:“256” }

基本上,我在 ByteArray 部分遇到问题。这对我不起作用。

【问题讨论】:

    标签: json kotlin android-volley kotlin-android-extensions rx-kotlin


    【解决方案1】:

    我创建这个函数是为了向服务器发送调用,这就是你在调用中添加正文的方式。

        fun sendcall() {
                //RequestQueue initialized
                mRequestQueue = Volley.newRequestQueue(this)
    
               //String Request initialized
                mStringRequest = object : StringRequest(Request.Method.POST, url, Response.Listener { response ->
                    Toast.makeText(applicationContext, "Logged In Successfully", Toast.LENGTH_SHORT).show()
    
    
                }, Response.ErrorListener { error ->
                    Log.i("This is the error", "Error :" + error.toString())
                    Toast.makeText(applicationContext, "Please make sure you enter correct password and username", Toast.LENGTH_SHORT).show()
                }) {
                    override fun getBodyContentType(): String {
                        return "application/json"
                    }
    
                    @Throws(AuthFailureError::class)
                    override fun getBody(): ByteArray {
                        val params2 = HashMap<String, String>()
                        params2.put("Login","your credentials" )
                        params2.put("Password", "your credentials")
                        return JSONObject(params2).toString().toByteArray()
                    }
    
                }
                mRequestQueue!!.add(mStringRequest!!)
            }
    

    【讨论】:

    • 由于我是 Kotlin 的新手,我在覆盖函数时遇到了错误。确保在 StringRequest 构造函数之前有“object :”语法。请参阅此处的文档以获取更多说明:kotlinlang.org/docs/reference/object-declarations.html
    • 这适用于修改:return 语句出现错误,我将其更改为 return JSONObject(params2 as Map&lt;*, *&gt;).toString().toByteArray()
    【解决方案2】:

    带有参数的 kotlin 中的 Volley 发布请求

    private fun loginUser() {
        val username: String = etName.getText().toString().trim()
        val password: String = etPass.getText().toString().trim()
        val stringRequest: StringRequest = object : StringRequest( Method.POST, LOGINURL,
            Response.Listener { response ->
                Toast.makeText(this, response, Toast.LENGTH_LONG).show()
                try {
                    val jsonObject = JSONObject(response)
                    //Parse your api responce here
                    /*val intent = Intent(this, MainActivity::class.java)
                    startActivity(intent)*/
                } catch (e: JSONException) {
                    e.printStackTrace()
                }
            },
            Response.ErrorListener { error ->
                Toast.makeText(this, error.toString(), Toast.LENGTH_LONG).show()
            }) {
            override fun getParams(): Map<String, String> {
                val params: MutableMap<String, String> = HashMap()
                //Change with your post params
                params["username"] = username
                params["password"] = password
                return params
            }
        }
        val requestQueue = Volley.newRequestQueue(this)
        requestQueue.add(stringRequest)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-09
      • 1970-01-01
      • 2016-03-17
      • 2019-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多