【问题标题】:Not getting proper response of error body using retrofit使用改造没有得到错误主体的正确响应
【发布时间】:2020-06-19 05:30:37
【问题描述】:

在登录时,实际上我的成功响应在 toast 上正确显示。但是当输入错误的详细信息时,错误正文响应没有正确显示

这是我的回应-->

{
"status": 401,
"data": false,
"message": "User login unsuccessful.",
"user_msg": "Email or password is wrong. try again"
}

我的以下代码:

override fun onResponse(
                    call: Call<LoginResponse>,
                    response: Response<LoginResponse>
                ) {
                    var res = response

                    Log.d("response check ", "" + response.body()?.status.toString())
                    if (res.body()?.status==200) {

                        SharedPrefManager.getInstance(applicationContext)
                            .saveUser(response.body()?.data!!)

                        val intent = Intent(applicationContext, HomeActivity::class.java)
                        intent.flags =
                            Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
                        Toast.makeText(
                            applicationContext,
                            res.body()?.message,
                            Toast.LENGTH_LONG
                        ).show()
                        Log.d("kjsfgxhufb",response.body()?.status.toString())
                        startActivity(intent)
                        finish()


                    }

            else
                    {
                        try {
                            val jObjError =
                                JSONObject(response.errorBody()!!.string())
                            Toast.makeText(
                                applicationContext,
                                jObjError.getJSONObject("user_msg").getString("message"),
                                Toast.LENGTH_LONG
                            ).show()
                        } catch (e: Exception) {
                           Toast.makeText(applicationContext, e.message, Toast.LENGTH_LONG).show()
                        }
                    }

我的输出是吐司:

Value Email or password is wrong. try again at user_msg of type java.lang.String cannot be 
converted to JSONObject

实际上我不想吐司这样的错误消息..我想要简单的消息,例如“电子邮件或密码错误。再试一次”

帮帮我,谢谢

【问题讨论】:

    标签: android json kotlin retrofit retrofit2


    【解决方案1】:

    所以,您正试图从 "user_msg" 获取 JSONObject,这是不可能的,因为 "user_msg" 不是 JSONObject,而是字符串

    一个 JSONObject 看起来像:

    "user_msg": {
       "message": "Your error"
    }
    

    但事实并非如此,你得到了两个不同的字符串值。

    "user_msg": "message",
    "message" : "another message"
    

    你应该做的是jObjError.getString("user_msg")"user_msg"获取值,另一个jObjError.getString("message")"message"获取值。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-11
    • 2019-03-13
    • 2017-10-27
    • 2020-11-10
    • 2017-03-06
    • 2016-04-29
    • 2015-12-19
    • 2021-08-17
    相关资源
    最近更新 更多