Android调用Dog Ceo API报错:期望数组起始符'['却遇到EOF
问题分析与解决方案
你的核心问题是Retrofit接口声明的返回类型和API实际返回的JSON结构不匹配:
- API返回的是一个单个JSON对象(外层为
{}),包含message数组和status字段 - 但你的
DogsApi接口却声明返回List<Dog>(数组类型),导致Kotlin Serialization试图把对象解析成数组,触发解码错误。
修复步骤
1. 修正Retrofit接口的返回类型
把接口的返回值从List<Dog>改为Dog,匹配API返回的单个对象结构:
interface DogsApi { @GET("hound/images") suspend fun dogApi(): Dog }
2. 确认Retrofit配置正确性
确保你已经正确添加了Kotlin Serialization转换器,并且baseUrl设置正确(需包含https://dog.ceo/api/breeds/):
import kotlinx.serialization.json.Json import okhttp3.MediaType.Companion.toMediaType import retrofit2.Retrofit import retrofit2.converter.kotlinx.serialization.asConverterFactory val retrofit = Retrofit.Builder() .baseUrl("https://dog.ceo/api/breeds/") .addConverterFactory(Json.asConverterFactory("application/json".toMediaType())) .build()
3. 正确处理接口返回数据
调用接口后,直接从返回的Dog对象中提取图片URL列表:
// 示例调用(建议在协程中执行) val dogsApi = retrofit.create(DogsApi::class.java) val dogResponse = dogsApi.dogApi() val imageUrls = dogResponse.image // 获取到图片URL列表,可用于Coil加载
内容的提问来源于stack exchange,提问作者Maxi Pelizzoni
相关产品推荐
相关产品推荐

