Отсутствие правильного ответа тела ошибки при модернизации - PullRequest
0 голосов
/ 19 июня 2020

при входе в систему, на самом деле мой успешный ответ отображается правильно на тосте. Но при вводе неправильных данных ответ тела ошибки не отображается должным образом

вот мой ответ ->

{
"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

на самом деле я не хочу показывать сообщение об ошибке, подобное этому ... Я хочу простое сообщение типа «электронная почта или неверный пароль. попробуйте еще раз "

помогите, спасибо

1 Ответ

2 голосов
/ 19 июня 2020

Итак, вы пытаетесь получить JSONObject из "user_msg", что невозможно, потому что "user_msg" не является JSONObject, это String .

JSONObject будет выглядеть так:

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

Но это не так, вы получаете два разных строковых значения.

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

Вам нужно jObjError.getString("user_msg"), чтобы получить значение из "user_msg", и еще один jObjError.getString("message"), чтобы получить значение из "message".

...