【发布时间】:2020-06-11 01:53:32
【问题描述】:
我正在尝试获取服务返回的错误(从无效凭据开始时)rest api,但由于某种原因,errorBody 没有从我的回答中捕获它。
我收到的正确答案没有问题,但是当我收到错误时,我无法解决服务器发送给我的内容。
对不起我的英语,我不得不使用翻译器
这是我应该得到错误的部分
override fun postLogin(callback: OperationCallBack<ResponseToken>, user: Login) {
call = Api.build()?.login(user)
call?.enqueue(object :Callback<ResponseToken>{
override fun onFailure(call: Call<ResponseToken>, t: Throwable) {
callback.onError(t.message)
}
override fun onResponse(call: Call<ResponseToken>, response: Response<ResponseToken>) {
Log.v(TAG, "ErrorMensaje: ${response.message()}")
Log.v(TAG, "ErrorBodyToString: ${response.errorBody().toString()}")
response.body()?.let {
if(response.isSuccessful && (it.isSuccess())){
Log.v(TAG, "token ${it.token}")
callback.onSuccess(it)
}else{
Log.v(TAG, "token ${it.token}")
callback.onError("Error ocurrido")
}
}
}
})
}
errorBody 仅使用 toString 向我显示,否则它返回 null。使用 toString 这就是我得到的
2020-06-10 19:26:05.095 26590-26590/com.umbani.umbani V/CONSOLE: ErrorMensaje:
2020-06-10 19:26:05.095 26590-26590/com.umbani.umbani V/CONSOLE: ErrorBodyToString: okhttp3.ResponseBody$Companion$asResponseBody$1@fcb3843
okHttp 控制台显示来自服务器的错误,我无法捕捉到
D/OkHttp: {"success":true,"error":{"message":"Invalid credentials"}}
使用 Gson 或其他转换器转换没有问题。我能做到。我已经这样做了,并得到了积极的回应。
我在 StackOverFlow 上看到了很多答案,但没有一个对我有帮助。 谢谢
更新: 我在这个答案中找到了解决方案: https://stackoverflow.com/a/55835083/10372439
解决方案:
将toString () 替换为string ()
response.errorBody()!!.string()
【问题讨论】:
-
节省了我的时间,因为它只告诉了 ."string()"。对于那些想知道的人,当您收到 404 或 400 错误代码时,您应该使用 errorBody() 而不是 body()。
标签: kotlin gson retrofit2 response http-status-code-500