gpt4 book ai didi

android - 使用 Retrofit 和 execute() 从错误响应中获取正文

转载 作者:太空狗 更新时间:2023-10-29 16:13:34 25 4
gpt4 key购买 nike

所以出于某种原因我需要像这样执行我的调用:

val result = manager.call.execute()
if (result.isSuccess) {
//do stuff
} else {
//handle exeption
}

当我的代码到达 else 括号时 result.body() 为 null 且 result.errorBody() 的缓冲区内容为0 但不是它的长度。

但是,这是我从改造中得到的日志:

<-- 400 Bad Request https://cubus-friends-
...
D/OkHttp: {"error":"validation_error","error_description":"No user with that phone number"}
D/OkHttp: <-- END HTTP (81-byte body)

如何将我的 json 错误字符串放入代码中的 else 括号中?

最佳答案

你可以像这样创建一个简单的类

class ApiError constructor(error: Throwable) {
var errorMessage = "An error occurred"
var error = "error"

init {
if (error is HttpException) {
val errorJsonString = error.response()
.errorBody()?.string()
parsedString = JsonParser().parse(errorJsonString)
this.error = parsedString.asJsonObject["error"].asString
this.errorMessage = parsedString.asJsonObject["error_message"].asString
} else {
this.errorMessage = error.message ?: this.errorMessage
}
}
}

然后像这样使用它

try  { 
val result = manager.call.execute()
} catch(error: IOException) {
ApiError(error).errorMessage
}

这种方法的优点是您可以在代码中的任何位置使用 ApiError(error).errorMessage,而无需重写解析逻辑。

全部来自this blog post (我写的)。

关于android - 使用 Retrofit 和 execute() 从错误响应中获取正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36481335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com