【问题标题】:How to handle dynamic JSON response using retrofit2 in kotlin?如何在 kotlin 中使用 retrofit2 处理动态 JSON 响应?
【发布时间】:2019-07-20 12:15:43
【问题描述】:

我在 kotlin 中使用 retrofit2 来获取 rest API 并从服务器获取数据,但是每次 API 发送的响应都有不同的 JSON 数据,而不是相同的 JSON 数据。我想处理动态 JSON 对象响应。不知道怎么弄。

我为静态 JSON 数据创建了数据类,但想要动态。

data class GetDetails(
    var Id: String? = null,
    var UId: String? = null,
    var DOB: String? = null,
    var Name: String? = null,
    var Address: String? = null
)

使用处理响应

requestCall.enqueue(object : Callback<List<GetDetails>> {

                override fun onResponse(call: Call<List<GetDetails>>, response: Response<List<GetDetails>>) {
...
})

我创建了一个静态数据类,但我想处理动态 JSON 对象响应。我的意思是当服务器 API 发送带有 4 个 JSON 元素或 10 个 JSON 元素或 20 个 JSON 元素的响应时。我应该可以应付的。

请帮帮我。

【问题讨论】:

    标签: android kotlin retrofit2


    【解决方案1】:

    你可以在json中作为JsonElement得到响应,然后处理

    @POST("function/ResizeImage?")
        fun resizeImage(@Query("AppGuid") guid:String,
                          @Query("UserAppGuid") uuid:String,
                          @Query("ImageUrl") imageUrl:String,
                          @Query("Width") width:String,
                        @Query("Height") height:String,
                        @Query("FileName") fileName:String,
                        @Query("FileType") fileType:String): Call<JsonElement>
    

    【讨论】:

      【解决方案2】:

      对于一个模型来处理 4 个 JSON 元素到 20 个 JSON 元素,这只是一种不好的做法。但是如果你正在经历这个,你必须将所有字段设置为可空(如果你没有任何强制性),并在尝试访问它时检查每个字段的 onResponse 是否为空。

      【讨论】:

        【解决方案3】:

        如果您的 JSON 响应是动态变化的,您可以将 json 存储为键值对 (Map) 并使用您已知的键。

        在 kotlin 中,您还可以将类委托属性存储在 map 中

        try link here

        Documentation here

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-04-18
          • 1970-01-01
          • 2020-04-25
          • 2012-12-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多