【问题标题】:Error message : Expected BEGIN_ARRAY but was BEGIN_OBJECT from my own rest server Localhost错误消息:应为 BEGIN_ARRAY 但是来自我自己的休息服务器 Localhost 的 BEGIN_OBJECT
【发布时间】:2021-09-01 10:44:50
【问题描述】:

我正在尝试使用 okHttp 从我自己在 localhost 上的休息服务器获取 android 上的 JSON,如下所示:

JSON

{
    "status": true,
    "data": [
        {
            "id": "1",
            "title": "Jadwal Catin 2021",
            "description": "bismillah"
        },
        {
            "id": "2",
            "title": "Jadwal Vaksin Covid Lansia",
            "description": "Tanggal 16-Juli-2021 di puskesmas perwira sudah bisa vaksin covi-19 untuk lansia"
        }
    ]
}

数据类

class Placeholder {
    var userId: Int? = null
    var id: Int? = null
    var title: String? = null
    @SerializedName("description")
    var body: String? = null
}

进入Recycleview

        override fun onResponse(call: okhttp3.Call, response: okhttp3.Response) {
            val body = response.body!!.string()
            var gson = GsonBuilder().create()
            var result = gson.fromJson(body, Array<Placeholder>::class.java).toList()

            runOnUiThread {
                beritaAdapter.setData(result)
            }

       

任何想法我应该如何解决它?

【问题讨论】:

  • 我认为您希望将 JSON 中的 data 反序列化为您的 PlaceHolder 类。 data 是你想要的数组,但是你得到的 body 是包含 data 和状态的对象。

标签: json kotlin okhttp rest


【解决方案1】:

您在此处显示的 JSON 不仅仅是 Placeholder 的数组,它是一个 JSON 对象 ({ ... }),它本身包含两个属性 statusdata。而data 是一个与您的Placeholder 类部分匹配的对象数组。

您可以通过以下类来表示整个 JSON:

class PlaceholdersResponse {
    var status: Boolean
    var data: List<Placeholder>
}

您可以通过这种方式访问​​您的数据数组:

var result = gson.fromJson(body, PlaceholdersResponse::class.java).data.toList()

【讨论】:

  • 谢谢它的工作,但我怎样才能在我的 recycleview 上获得最新的?
  • 您的 JSON 中似乎没有任何日期概念。如果它们在 JSON 中从最旧到最新排序,您可以使用列表中的asReversed() 函数来获取列表中的反向视图。
猜你喜欢
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 2015-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-23
  • 2020-09-22
相关资源
最近更新 更多