带有trofitfit2和kotlin的errorBody

问题描述 投票:0回答:1

我正在尝试获取服务返回的错误(使用无效的凭据开始时)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上看到了很多答案,但都没有帮助我。谢谢

kotlin gson retrofit2 response http-status-code-500
1个回答
0
投票

尝试覆盖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) {

                }
         }
}
© www.soinside.com 2019 - 2024. All rights reserved.