错误消息:应为 BEGIN_ARRAY 但是来自我自己的休息服务器 Localhost 的 BEGIN_OBJECT
Posted
技术标签:
【中文标题】错误消息:应为 BEGIN_ARRAY 但是来自我自己的休息服务器 Localhost 的 BEGIN_OBJECT【英文标题】:Error message : Expected BEGIN_ARRAY but was BEGIN_OBJECT from my own rest server Localhost 【发布时间】: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
和状态的对象。
【参考方案1】:
您在此处显示的 JSON 不仅仅是 Placeholder
的数组,它是一个 JSON 对象 ( ...
),它本身包含两个属性 status
和 data
。而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()
函数来获取列表中的反向视图。以上是关于错误消息:应为 BEGIN_ARRAY 但是来自我自己的休息服务器 Localhost 的 BEGIN_OBJECT的主要内容,如果未能解决你的问题,请参考以下文章
java.lang.IllegalStateException:应为 BEGIN_ARRAY,但在第 1 行第 2 列是 BEGIN_OBJECT
应为 BEGIN_ARRAY,但在第 1 行第 1 列路径为 STRING
java.lang.IllegalStateException:应为 BEGIN_ARRAY,但路径为 BEGIN_OBJECT