我正在尝试获取服务返回的错误(使用无效的凭据开始时)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上看到了很多答案,但都没有帮助我。谢谢
尝试覆盖onFailure块,然后使用正确的对象进行投射
override fun onFailure(call: Call< ResponseToken >, t: Throwable) {
if (t is HttpException) {
try {
val errorStringRaw: String? = t.response()?.errorBody()?.string()
//Parse error message; format is api specific; we can't make a generic approach for this as of the moment
val type = object : TypeToken<ResponseBody?>() {}.type
val response: ResponseBody = Gson().fromJson(errorStringRaw, type)
} catch (e: Exception) {
}
}
}