Android Kotlin - Volley Unexpected响应代码500

时间:2017-11-15 20:14:16

标签: android django-rest-framework kotlin android-volley

我使用Django Rest Framework制作了REST API。目前,我正在为我的网站开发移动应用。当我发出POST请求时(这是我在我的应用中的第二个POST请求)我收到此错误:

  

E / Volley:[385] BasicNetwork.performRequest:http://laude.ct8.pl/api/user/data/aktualizacja/的意外响应代码500

这是我的代码:

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)
    }

当我在我的网站上使用相同的数据时,我没有收到任何错误,我只在移动应用上获得。 谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

服务器错误是由于您制作JsonObjectRequest并将JsonObject作为参数体传递而服务器需要Strings我观察到链接! / em>的)。快速解决方法是使用StringRequest并将您的参数作为字符串传递给!检查下面的代码以获得想法!

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)

}

您还应该注意,响应也是String,因此如果您需要将其作为JSONOject转换它。

很抱歉,如果您的代码中有任何错误!我用Java编写代码并使用Android Studio转换为Kotlin!我希望你能得到一般的想法!