Как я могу получить сообщение errorBody, отправленное с сервера при модификации обработчика ошибок? - PullRequest
0 голосов
/ 24 апреля 2019

Когда все идет хорошо, я могу без проблем извлечь тело из response.body().

Хотя на сервере возникает ошибка проверки (в моем случае дублированная электронная почта), она отправляет ошибку на frontend, и когда я пытаюсь получить доступ к телу ошибки response.errorBody () получена следующая информация:

"E/API Activity: onResponse: PostSalao okhttp3.ResponseBody$1@84d856e"

Я ожидал получить что-то вроде "ошибка: электронная почта уже используется" .

Как выможет видеть на этом видео вкл (10:08), он делает то же самое, что я делаю с моим кодом, но он корректно получает ошибки (10:17).

Чтоя делаю не так?

fun postCliente(cliente: Cliente) {
        val TAG = "API Activity"
        val apiInterface: ApiInterface
        apiInterface = ClientApi.getClient().create(ApiInterface::class.java)
        val clientePostCall = apiInterface.postCliente(cliente)
        mProgressBar.visibility = View.VISIBLE

        clientePostCall.enqueue(object: Callback<Cliente> {
            override fun onResponse(call: Call<Cliente>, response: Response<Cliente>) {
                mProgressBar.visibility = View.GONE
                if(response.isSuccessful){
                    try {
                    Toast.makeText(context,"Usuario " + response.body()!!.name + " criado com sucesso.",Toast.LENGTH_SHORT).show()
                        val backHomeIntent = Intent(context, MainActivity::class.java)
                        context.startActivity(backHomeIntent)
                    } catch (e: NullPointerException) {
                        Toast.makeText(context, "Problem is unknown: ", Toast.LENGTH_SHORT).show()
                    }
                }else {
                    try {
                        val errorBody = response.errorBody().toString()


                        Toast.makeText(context, "Dados incorretos", Toast.LENGTH_SHORT).show()
                            Log.e(TAG, "onResponse: " + errorBody )

                    } catch (e: IOException){
                        Toast.makeText(context, "Problem is unknown: ", Toast.LENGTH_SHORT).show()
                    }
                }
            }
            override fun onFailure(call: Call<Cliente>, t: Throwable) {
                mProgressBar.visibility = View.GONE
                Log.e(TAG, "onFailure: " + t.localizedMessage)
            }
        })
    }

Logcat на Android в красном

1 Ответ

1 голос
/ 24 апреля 2019

Вы должны использовать string () вместо toString (), чтобы получить правильное сообщение об ошибке.Таким образом, ваш код будет выглядеть примерно так:

fun postCliente(cliente: Cliente) {
    val TAG = "API Activity"
    val apiInterface: ApiInterface
    apiInterface = ClientApi.getClient().create(ApiInterface::class.java)
    val clientePostCall = apiInterface.postCliente(cliente)
    mProgressBar.visibility = View.VISIBLE

    clientePostCall.enqueue(object: Callback<Cliente> {
        override fun onResponse(call: Call<Cliente>, response: Response<Cliente>) {
            mProgressBar.visibility = View.GONE
            if(response.isSuccessful){
                try {
                Toast.makeText(context,"Usuario " + response.body()!!.name + " criado com sucesso.",Toast.LENGTH_SHORT).show()
                    val backHomeIntent = Intent(context, MainActivity::class.java)
                    context.startActivity(backHomeIntent)
                } catch (e: NullPointerException) {
                    Toast.makeText(context, "Problem is unknown: ", Toast.LENGTH_SHORT).show()
                }
            }else {
                try {
                    val errorBody = response.errorBody().string()


                    Toast.makeText(context, "Dados incorretos", Toast.LENGTH_SHORT).show()
                        Log.e(TAG, "onResponse: " + errorBody )

                } catch (e: IOException){
                    Toast.makeText(context, "Problem is unknown: ", Toast.LENGTH_SHORT).show()
                }
            }
        }
        override fun onFailure(call: Call<Cliente>, t: Throwable) {
            mProgressBar.visibility = View.GONE
            Log.e(TAG, "onFailure: " + t.localizedMessage)
        }
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...