【问题标题】:Retrofit Error Handling with different types of responses使用不同类型的响应改造错误处理
【发布时间】:2021-12-21 23:26:59
【问题描述】:

对于两种不同的情况,我有两种不同的反应。一种情况是我得到一个 JSONArray 作为响应

 [ {
        "type" : "cat",       
        "color": "black"
      }, 
      {
        "type" : "cat",
        "color": "white"
      } ]

这是我应该得到的正常反应。但如果响应不适用于我发送的正文,我会收到以下响应。

{ "message" : "response not available for this date" }

这是我的发帖请求

@POST("user/userTimetable")
    fun getTypeApi(@HeaderMap headers: Map<String, String>, @Body body: ScheduleBody?) : Call <List<Type>>

当我得到后一个响应时,我遇到了崩溃

java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

如何在 kotlin 上处理这种类型的响应?

【问题讨论】:

    标签: android kotlin retrofit2


    【解决方案1】:

    Retrofit 不会预测响应,因此要么将结果类型设置为 ResponseBody 并使用对象类型,要么更改后端以发送实现错误消息和数据的默认情况。

    【讨论】:

      【解决方案2】:

      我曾经遇到过这个问题,请按照下面的代码进行操作

      1. 创建一个名为 ErrorResponse 的模型类,它将返回上面的数据并修改为仅显示您的消息响应。

      1. 创建一个名为 ErrorResponseService 的类,该类将用于将 ErrorMessage 映射到返回的响应。

      1. 然后在您的 Retrofit 调用中执行此实现,以在您的响应失败时获取错误消息。

      【讨论】:

      • 尽量不要使用截图来展示代码。
      • 我们在哪里执行第 3 步?不是很清楚
      • 在你的 onResponse 回调中使用它,一旦你检查了 response.isSuccessful 然后使用上面的代码来映​​射你的响应来显示你的错误信息
      • 由于我提到的崩溃,它不会进入 onResponse 回调。它进入 onFailure 回调。我尝试将 getTypeApi 的返回类型更改为 ErrorResponse,然后进入 onResponse 回调。
      猜你喜欢
      • 2020-09-15
      • 2018-05-26
      • 2019-09-10
      • 2015-10-10
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多