在 Kotlin 中为成功和错误处理两种不同的改造响应

Posted

技术标签:

【中文标题】在 Kotlin 中为成功和错误处理两种不同的改造响应【英文标题】:Handling two different Retrofit responses for success and error in Kotlin 【发布时间】:2021-12-28 14:30:37 【问题描述】:

我正在 Kotlin 中构建一个 android 应用程序,响应以两种不同的结构来表示成功和错误。我的问题是,我可以将这两个响应组合在一起并创建一个数据类,还是应该为此创建一个密封类? 成功响应:


    "access_token": "xxxxxxxxxxxxxxxxxxxx",
    "token_type": "bearer"

错误响应:


    "detail": [
        
            "loc": [
                "body"
            ],
            "msg": "Invalid credentials",
            "type": "invalid-credentials"
        
    ]

那么我可以在单个数据类中这样写,还是使用密封类?

data class Auth (
   val access_token: String,
   val token_type: String,
   val details: Details
)

【问题讨论】:

【参考方案1】:

是的,请尝试将所有数据合并到一个数据类中。只需将所有变量设为可选即可。

data class Auth (
   val access_token: String?,
   val token_type: String?,
   val detail: List<Detail>?
)

编辑:关于如何访问嵌套数据。很简单。

data class Detail ( 
  val loc: List<String>,
  val msg: String,
  val type: String
)

然后,当发生错误时,您可以使用 val msg = auth.detail?.msg 之类的内容访问数据

【讨论】:

所以你认为根据成功和错误,数据类不需要密封类,它会一样工作吗? 没必要。对于您提供的示例,使用密封类会过度设计。 但是我应该如何访问属于 Details 类的观察方法 msg 或 loc 或类型? 我更新了我的答案。让我知道这是否有帮助。 我尝试了访问 msg、loc 或 type 的方法,但我无法访问它我不知道为什么

以上是关于在 Kotlin 中为成功和错误处理两种不同的改造响应的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin 使用协程处理改造请求

如何将改造回调响应中的回调从 java 转换为 Kotlin

使用 Kotlin 处理错误 RXJava Android

kotlin android中的改造请求@Part和@Query

改造图片上传无法处理的实体错误

Kotlin:EditText 在 afterTextChanged() 中为空