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

Android中Retrofit处理非嵌套数组的Get请求问题

解决无嵌套JSON数组的Retrofit解析问题

1. 定义数据实体类

因为你的JSON是无嵌套的数组结构,直接去掉原示例中包裹data字段的外层类,只需要定义单个数据项的实体类,对应你要获取的sgv、direction、date字段:

data class GlucoseData(
    val sgv: Int, // 根据JSON实际数据类型调整,比如字符串就用String
    val direction: String,
    val date: Long // 假设是时间戳格式,实际是字符串就改成String
)

如果字段名和JSON键不一致,可通过@SerializedName注解映射:

data class GlucoseData(
    @SerializedName("sgv") val bloodGlucose: Int,
    @SerializedName("direction") val trend: String,
    @SerializedName("date") val timestamp: Long
)

2. 修改Retrofit接口

原示例接口返回的是包含data字段的对象,现在要改成直接返回数组列表:

interface ApiService {
    @GET("你的接口路径")
    fun getGlucoseData(): Call<List<GlucoseData>>
}

3. 调整请求回调逻辑

原来要取response.body()?.data,现在直接获取返回的列表,遍历即可拿到每个项的字段值:

val apiService = Retrofit.Builder()
    .baseUrl("你的基础URL")
    .addConverterFactory(GsonConverterFactory.create())
    .build()
    .create(ApiService::class.java)

apiService.getGlucoseData().enqueue(object : Callback<List<GlucoseData>> {
    override fun onResponse(call: Call<List<GlucoseData>>, response: Response<List<GlucoseData>>) {
        if (response.isSuccessful) {
            val dataList = response.body() ?: emptyList()
            // 遍历列表提取字段
            dataList.forEach { data ->
                val sgv = data.sgv
                val direction = data.direction
                val date = data.date
                // 这里处理数据,比如更新UI
            }
        }
    }

    override fun onFailure(call: Call<List<GlucoseData>>, t: Throwable) {
        // 处理请求失败逻辑
    }
})

内容的提问来源于stack exchange,提问作者Henry Aspden

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 03:06:38