Android Kotlin – Volley Código de respuesta inesperada 500

Hice REST API con Django Rest Framework. Actualmente, estoy trabajando en una aplicación mobile para mi sitio. Cuando hago la request POST (es mi segunda request POST en mi aplicación) recibo este error:

E / Volley: [385] BasicNetwork.performRequest: código de respuesta inesperado 500 para http://laude.ct8.pl/api/user/data/aktualizacja/

Aquí está mi código:

private val UPDATE_URL = "http://laude.ct8.pl/api/user/data/aktualizacja/" private var volleyRequest: RequestQueue? = null private val jsonObj = JSONObject() volleyRequest = Volley.newRequestQueue(this) private fun aktualizacja() { jsonObj.put("librus_user", usernameEdit.text) jsonObj.put("librus_pswd", passwordEdit.text) val req = JsonObjectRequest(Request.Method.POST, UPDATE_URL, jsonObj, Response.Listener { response -> Toast.makeText(this, response.toString(), Toast.LENGTH_LONG).show() val user = Intent(this, UserActivity::class.java) startActivity(user) }, Response.ErrorListener { error -> Toast.makeText(this, error.toString(), Toast.LENGTH_LONG).show() }) req.retryPolicy = DefaultRetryPolicy(60000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT) volleyRequest!!.add(req) } 

Cuando uso los mismos datos en mi website no obtengo ningún error, solo lo obtengo en una aplicación mobile. Gracias por la ayuda !

El error del server es causado por usted haciendo JsonObjectRequest y pasando un JsonObject como un cuerpo de parámetro mientras su server los requiere como Strings ( ¡Observé el enlace! ). La solución rápida es usar StringRequest y pasar sus parameters como una cadena como! ¡Comtesting el código a continuación para entender la idea!

 private val UPDATE_URL = "http://laude.ct8.pl/api/user/data/aktualizacja/" private var volleyRequest: RequestQueue? = null volleyRequest = Volley.newRequestQueue(this) private fun aktualizacja() { val req = object : StringRequest(Request.Method.POST, UPDATE_URL, Response.Listener { response -> Toast.makeText(this, response, Toast.LENGTH_LONG).show() val user = Intent(this, UserActivity::class.java) startActivity(user) }, Response.ErrorListener { e -> Toast.makeText(this, error.toString(), Toast.LENGTH_LONG).show() }) { public override fun getParams(): Map<String, String> { val params = HashMap<String, String>() params.put("username", usernameEdit.text) params.put("password", passwordEdit.text) return params } } req.retryPolicy = DefaultRetryPolicy(60000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT) volleyRequest!!.add(req) } 

También debe tener en count que la respuesta también es una String por lo que si la necesita como un object JSONOject .

Disculpa si recibes algún error en el código. ¡Escribí el código en Java y lo convertí a Kotlin usando Android Studio! ¡Espero que tengas la idea general!

  • Kotlin + MVP: anulación accidental
  • ¿Cómo configurar Jacoco con Spek en un proyecto múltiple?
  • Android OutOfMemoryError: no se pudo asignar una asignación de bytes 57993496 con 16764448 bytes libres
  • En Kotlin, error de deserialization de Jackson con class de datos
  • ¿Por qué puedo definir una var sin una class en Kotlin?
  • Daga 2: inputs múltiples con la misma key
  • Error " no se puede convertir a JSON" al intentar crear un object JSON de String
  • ¿Cómo iniciar session dentro de la function de filter de Kotlin?
  • Kotlin: el range For-loop debe tener un método 'iterator ()'
  • NoClassDefFoundError en time de ejecución
  • El proyecto no se comstackrá con Kotlin 1.1.3