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
相关产品推荐
相关产品推荐

