android - com.squreup.moshi.JsonDataException : Expected a string but was NULL at path $. 数据.性别

标签 android json kotlin moshi

我需要从服务器请求中解析数据类,如下所示:

@JsonClass(generateAdapter = true)
data class User(
    @Json(name = "user_name")
    val userName: String,
    @Json(name = "gender")
    val gender: Gender?,
) {
    enum class Gender {
        @Json(name = "male")
        MALE,

        @Json(name = "female")
        FEMALE,
    }
}

我从服务器获取了这个 json:

{
    "data":{
     "user_name":"MyUserName",
     "gender":null
    }
}

但是我有这个错误 com.squreup.moshi.JsonDataException:需要一个字符串,但在路径 $.data.gender 处为 NULL

有没有办法在不更改服务器 API 的情况下解决这个问题?

UPD:问题出在 EnumJsonAdapter 中,回退未知:

Moshi.Builder()
   .add(KotlinJsonAdapterFactory())
   .add(
       User.Gender::class.java,
       EnumJsonAdapter.create(User.Gender::class.java)
           .withUnknownFallback(null)
    )
    .build()

最佳答案

解决方案:将 nullSafe() 添加到适配器

Moshi.Builder()
   .add(KotlinJsonAdapterFactory())
   .add(
       User.Gender::class.java,
       EnumJsonAdapter.create(User.Gender::class.java)
           .withUnknownFallback(null)
           .nullSafe()
    )
    .build()

关于android - com.squreup.moshi.JsonDataException : Expected a string but was NULL at path $. 数据.性别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71485872/

相关文章:

android - 在 ionic 输入中隐藏键盘

android - 如何在 android 中捕获可滑动选项卡的 Activity 部分或选项卡?

generics - 如何定义可扩展但不能为空的通用参数

regex - 如何在 kotlin 正则表达式中使用反向引用?

kotlin - Kotlin-通过键集中获取最大值

java - 如何使用viewHolder使listView用户输入在滚动离开屏幕时不返回默认值

java - 在 Android 上将 Bitmap() 分享到推特、 Facebook 、邮件

json - PWA 调试 chrome "add to homescreen"按钮没有执行任何操作

mysql - 除非行数有限,否则为什么我无法从 JSON post 请求获得响应?

javascript - 用变量解析 getJson