【问题标题】:How to handle error response with retrofit + coroutines如何使用改造 + 协程处理错误响应
【发布时间】:2019-09-10 20:01:32
【问题描述】:

我是协程新手。尝试使用改造 + 协程 + Jake Wharton 的 CoroutineCallAdapterFactory by this tutorial

但不知道如何处理 json 响应错误。例如错误可能是这样的:

{
  "code": 105,
  "error": "invalid field name: bl!ng"
} 

我认为在 TmdbMovie 类中添加 codeerror 字段(并检查对象的空字段) - 这是错误的。 然后 - 在 TmdbViewModel 中启动协程后如何使用错误字段?

【问题讨论】:

    标签: android kotlin retrofit coroutine


    【解决方案1】:

    try/catchawait@JakeWharton 在此issue 中推荐的@

    try {
        youService().await()
    } catch(ex: HttpException) {
        // do your handling here
    }
    

    【讨论】:

    • 将所有异常置于活动/视图级别?这里有其他方法吗?
    • @ralphgabb 很遗憾,我没有跟进此案
    • 但是如果服务器发送一条错误消息,您想向用户显示呢?如果我没记错的话,收到的错误消息将不会在 catch 中可用。
    • @Vega180,捕获 HttpException 将允许您从服务器获取错误响应(在我们的例子中,采用 JSON 格式)。 ex.errorBody()?.toString()。然后,如果您愿意,只需使用您最喜欢的 JSON 序列化器/反序列化器库来解析为一个对象。我还建议捕获其他异常(例如SocketTimeoutExceptionUnknownHostException 等),以便在必要时提供更多反馈。例如,5xx 错误不会以HttpException 的形式返回,您需要进行相应处理。
    猜你喜欢
    • 1970-01-01
    • 2015-10-10
    • 2021-12-21
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 2019-11-04
    • 2020-02-22
    相关资源
    最近更新 更多