Kotlin应为BEGIN_对象,但在第1行第2列路径处为BEGIN_数组$

Kotlin应为BEGIN_对象,但在第1行第2列路径处为BEGIN_数组$,kotlin,gson,retrofit,Kotlin,Gson,Retrofit,嗨,我有改装和api的问题。我使用了以下api: 我添加我的身份验证密钥 这是我的带有插件kotlin数据类的模型: data class CatsItem( @SerializedName("adaptability") val adaptability: Int, @SerializedName("affection_level") val affectionLevel: Int, @SerializedName

嗨,我有改装和api的问题。我使用了以下api: 我添加我的身份验证密钥

这是我的带有插件kotlin数据类的模型:

data class CatsItem(
    @SerializedName("adaptability")
    val adaptability: Int,
    @SerializedName("affection_level")
    val affectionLevel: Int,
    @SerializedName("alt_names")
    val altNames: String,
    @SerializedName("bidability")
    val bidability: Int,
    @SerializedName("cat_friendly")
    val catFriendly: Int,
    @SerializedName("cfa_url")
    val cfaUrl: String,
    @SerializedName("child_friendly")
    val childFriendly: Int,
    @SerializedName("country_code")
    val countryCode: String,
    @SerializedName("country_codes")
    val countryCodes: String,
    @SerializedName("description")
    val description: String,
    @SerializedName("dog_friendly")
    val dogFriendly: Int,
    @SerializedName("energy_level")
    val energyLevel: Int,
    @SerializedName("experimental")
    val experimental: Int,
    @SerializedName("grooming")
    val grooming: Int,
    @SerializedName("hairless")
    val hairless: Int,
    @SerializedName("health_issues")
    val healthIssues: Int,
    @SerializedName("hypoallergenic")
    val hypoallergenic: Int,
    @SerializedName("id")
    val id: String,
    @SerializedName("indoor")
    val indoor: Int,
    @SerializedName("intelligence")
    val intelligence: Int,
    @SerializedName("lap")
    val lap: Int,
    @SerializedName("life_span")
    val lifeSpan: String,
    @SerializedName("name")
    val name: String,
    @SerializedName("natural")
    val natural: Int,
    @SerializedName("origin")
    val origin: String,
    @SerializedName("rare")
    val rare: Int,
    @SerializedName("rex")
    val rex: Int,
    @SerializedName("shedding_level")
    val sheddingLevel: Int,
    @SerializedName("short_legs")
    val shortLegs: Int,
    @SerializedName("social_needs")
    val socialNeeds: Int,
    @SerializedName("stranger_friendly")
    val strangerFriendly: Int,
    @SerializedName("suppressed_tail")
    val suppressedTail: Int,
    @SerializedName("temperament")
    val temperament: String,
    @SerializedName("vcahospitals_url")
    val vcahospitalsUrl: String,
    @SerializedName("vetstreet_url")
    val vetstreetUrl: String,
    @SerializedName("vocalisation")
    val vocalisation: Int,
    @SerializedName("weight")
    val weight: Weight,
    @SerializedName("wikipedia_url")
    val wikipediaUrl: String
)
以下是我的回应:

>  viewModel.myResponse.observe(this, Observer { response ->
            if (response.isSuccessful) {
                Log.d("Response", response.body()?.id.toString())
               massage.text = response.body()?.name.toString()
                

            } else {
                Log.d("Response", response.errorBody().toString())
                errormassage.text = response.code().toString()
            }
        })
我想在textView中显示我的姓名,但我在运行应用程序时出错:

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:应为BEGIN_对象,但在第1行第2列路径处为BEGIN_数组$

我做错了什么


感谢您提供的提示和帮助

从您指定的URL生成的JSON将返回一个对象数组。如果整个响应都是成功案例中
response.body()
中的响应,那么您的代码无法正确处理该响应。它假设返回的结构由单个对象而不是对象数组组成

换句话说,返回的结果如下所示:

[
    {
        "key1": "value1",
        "key2": 1234
    }
]
response.body()?.get(0).name.toString()
但您的代码期望:

{
    "key1": "value1",
    "key2": 1234
}
如果您不确定,为什么不打印出
response.body()
的值来查看其中的内容

如果是这样的情况,修复程序将如下所示:

[
    {
        "key1": "value1",
        "key2": 1234
    }
]
response.body()?.get(0).name.toString()
对数组中的第一项进行操作。(或者类似的东西。我对Kotlin vs Java做的很少,所以可能还有另一个
或其他东西。)