You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Retrofit请求中的java.lang.IllegalStateException解析错误?

错误分析与解决方案

错误原因

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY 本质是接口返回JSON数组格式(用[]包裹),但你的代码用单个DataModalItem对象接收解析。从接口路径/jokes/random/25能看出,接口会返回25条笑话组成的数组,而非单条笑话对象。

具体修改步骤

1. 修改接口定义(apiService.kt)

将返回类型从单个对象改为数组列表:

@GET("/jokes/random/25")
fun getData(): Call<List<DataModalItem>>

2. 修改Activity中的回调逻辑(MainActivity.kt)

同步更新回调的泛型类型,并处理数组数据:

fun getData() {
    apiCall().apiService.getData()
        .enqueue(object : Callback<List<DataModalItem>> {
            override fun onResponse(
                call: Call<List<DataModalItem>>,
                response: Response<List<DataModalItem>>
            ) {
                // 遍历数组,处理每条笑话数据
                response.body()?.forEach { joke ->
                    Log.e("CHECK_RES", "onResponse: 笑话包袱: ${joke.punchline}")
                }
            }

            override fun onFailure(call: Call<List<DataModalItem>>, t: Throwable) {
                Log.e("CHECK_RES", "Error: ${t.localizedMessage}")
                Toast.makeText(this@MainActivity, "Error: ${t.localizedMessage}", Toast.LENGTH_SHORT).show()
            }
        })
}

3. 确保DataModalItem类字段匹配接口返回

如果还未正确定义DataModalItem,需保证其字段与接口返回的单条笑话结构一致:

data class DataModalItem(
    val id: Int,
    val type: String,
    val setup: String,
    val punchline: String
)

内容的提问来源于stack exchange,提问作者Kruti Devani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 21:17:40