【问题标题】:Android Kotlin - Volley Unexpected response code 500Android Kotlin - Volley 意外响应代码 500
【发布时间】:2017-11-15 20:14:15
【问题描述】:

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

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

【问题讨论】:

  • 500 表示存在内部服务器错误。这不是 Android 问题,这是服务器/网站问题
  • Error 500 是服务器错误,这意味着您的代码没有问题(可能有错误),但您必须在检查您的应用程序代码之前检查您的服务器错误原因!在您的服务器中显示日志!
  • @Xenolion 我只能访问错误和访问日志。我没有得到任何这些。
  • 在仔细观察上面的网站后,我想出了上面错误的原因!你已经解决了还是我应该回答它!

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


【解决方案1】:

服务器错误是由您创建JsonObjectRequest 并将JsonObject 作为参数体传递而您的服务器需要它们作为Strings 引起的(我观察到了链接!)。快速解决方法是使用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!希望您能大致了解一下!

【讨论】:

  • 感谢您的回答,但我遇到了同样的错误。
  • 好的,但我意识到即使使用浏览器访问链接也会崩溃导致异常,因此您有 500 个代码,这是服务器错误。请先使用浏览器发帖尝试调试,一切顺利!
  • 这是错误During handling of the above exception (list assignment index out of range), another exception occurred:
  • 是的,当您输入不正确的数据时会出现此错误。我不应该收到此错误,因为我使用了正确的数据。
  • 你能和我分享一下正确的数据还是分类的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多