You need to enable JavaScript to run this app. Android端Retrofit请求200状态但响应字段全为null的问题排查
优惠活动
大模型
产品
解决方案
定价
更多

Android端Retrofit请求200状态但响应字段全为null的问题排查

问题根因与修正方案

问题定位

你遇到的状态码200但解析字段全为null的问题,核心来自三处实现偏差:

  • 响应结构匹配错误(最核心原因)
    实际接口返回的JSON根结构是包含result数组的对象,数组元素才是单条记录实体。你当前将Retrofit接口的响应泛型直接声明为Call<Record.Item>,相当于让Gson把整个根JSON强行映射到单条Item对象上,根本定位不到id/title等字段的位置,最终所有字段解析结果为null。
  • 数据类定义不完整、类型不匹配
    你定义的单条记录类遗漏了接口返回中的description字段;同时返回里的id、account_id为数字类型,你全部声明为String类型,即便结构匹配正确,类型不匹配也可能触发解析失败。
  • Retrofit接口写法不规范
    你在@GET注解中直接硬编码带?的查询参数,本次虽然碰巧拼接出了正确的请求地址,但不符合Retrofit的参数传递规范,后续极易出现地址拼接错误。

代码修正示例

1. 调整数据类定义,完全匹配返回结构

// 根响应对象,对应接口外层的result结构
data class RecordListResponse(
    val result: List<RecordItem>
)

// 单条记录实体,字段名、类型与返回值严格对应
data class RecordItem(
    val id: Int,
    val account_id: Int,
    val title: String,
    val datetime: String,
    val description: String?, // 声明为可空,匹配返回中可能为null的场景
    val image: String?,
    val recording: String?
)

2. 修正Retrofit接口定义

interface Gett {
    // 用@Query注解传递查询参数,替代硬编码的查询串
    @GET("records/")
    fun getRecord(@Query("account_id") accountId: Int): Call<RecordListResponse>
}

3. 调整Retrofit初始化与请求逻辑

val retrofit = Retrofit.Builder()
    // baseUrl需以/结尾,仅指向域名+端口的根路径,不要拼接后续接口路径
    .baseUrl("http://192.168.0.220:8000/")
    .addConverterFactory(GsonConverterFactory.create())
    .build()

val service = retrofit.create(Gett::class.java)
// 传入account_id=2作为查询参数
val call = service.getRecord(accountId = 2)

call.enqueue(object : retrofit2.Callback<RecordListResponse> {
    override fun onResponse(call: Call<RecordListResponse>, response: Response<RecordListResponse>) {
        if (response.isSuccessful) {
            // 正常获取到解析完成的记录列表
            val recordList = response.body()?.result
            println("解析得到的记录列表:$recordList")
        }
    }

    override fun onFailure(call: Call<RecordListResponse>, t: Throwable) {
        println("请求失败:${t.message}")
    }
})

补充排查提示

如果修正后仍存在解析问题,可添加HttpLoggingInterceptor打印接口原始返回的JSON串,逐字段和数据类的名称、类型做核对,避免出现字段名拼写不一致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 21:45:10