Как добавить тело в URL в запросе Volley в Котлине?

Вот мой код для запроса залпа: -

    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)

Я хочу добавить эту информацию в раздел body

video_id = "BDJIAH", audio_quality = "256"

вот пример добавления вышеуказанной информации в сегмент ниже.

{ "video_id": "ABCDE", "audio_quality": "256" }

В основном, я столкнулся с проблемой в разделе ByteArray. Это не работает для меня.


person shivam Kapoor    schedule 07.09.2018    source источник


Ответы (2)


Эту функцию я создал для отправки вызова на сервер, и именно так вы добавите тело в свой вызов.

    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!!)
        }
person Kylo Ren    schedule 16.11.2018
comment
Поскольку я новичок в Kotlin, я получаю сообщение об ошибке с функциями переопределения. Убедитесь, что у вас есть синтаксис object: перед конструктором StringRequest. Подробнее см. документ здесь: kotlinlang.org/docs/reference/object-declarations.html - person Barodapride; 01.11.2020
comment
Это работало с модификациями: у меня были ошибки с оператором возврата, который я изменил на return JSONObject(params2 as Map<*, *>).toString().toByteArray(). - person SMBiggs; 01.08.2021

Почтовый запрос залпа в котлине с параметрами

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)
}
person Aftab Alam    schedule 05.02.2020