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

Retrofit返回Null但OkHttp拦截器有数据问题排查求助

Retrofit返回null但OkHttp日志有数据的排查方向

1. 数据类与JSON响应的映射校验

  • 核对数据类字段名、类型和返回JSON完全匹配:注意大小写、驼峰/下划线差异,必要时加@SerializedName指定对应JSON字段。比如JSON返回customer_id,数据类字段是customerId的话,必须加@SerializedName("customer_id")。
  • 检查嵌套结构一致性:如果JSON是多层嵌套(比如{"data": {"user": {...}}}),数据类必须对应嵌套层级,不能直接解析内层对象。
  • 处理可空字段:JSON中可能为null的字段,数据类要标记为?可空类型,避免解析失败。
  • 配置解析器忽略未知字段:给数据类加@JsonIgnoreProperties(ignoreUnknown = true)(Gson),或者在解析器构建时开启忽略未知字段,防止接口返回额外字段导致解析失败。

2. Retrofit接口定义检查

  • 确认接口方法返回类型正确:比如用Call<YourDataModel>、suspend fun getCustomer(): YourDataModel,如果返回类型写错(比如Call<Void>),必然得到null。
  • 核对请求参数配置:检查@Body的请求体是否正确,@Headers里的SessionKey是否携带正确(虽然日志有返回,但可能请求参数导致响应结构和预期不符)。
  • 对比请求URL:和OkHttp日志里的Request URL对比,确保接口路径完全一致,避免路径错误返回非预期结构的响应。

3. 业务层逻辑排查

  • 检查Repository的响应处理:调用Retrofit接口时,必须先判断response.isSuccessful(),只有成功时response.body()才有效;如果响应码非200-300,要查看response.errorBody()的内容,此时body()会返回null。
  • 验证ViewModel的数据流收集:如果用Flow或协程,确保协程正常启动,数据流被正确收集,没有因为生命周期或调度器问题导致数据未传递。
  • 添加异常捕获:在Repository的Retrofit调用处加try-catch,打印异常堆栈信息——很多时候解析异常会被吞掉,直接返回null,日志里看不到错误。

4. OkHttp日志细节核对

  • 仔细看Response Body的结构:确认是否和数据类匹配,比如有没有外层的data或result包裹,而你的数据类没对应这个外层结构。
  • 检查响应的Content-Type:必须是application/json,如果是text/plain或其他类型,解析器无法解析JSON,会返回null。
  • 确认日志属于当前请求:避免把其他请求的响应日志当成当前请求的,导致判断错误。

5. Retrofit实例初始化验证

  • 确认添加了ConverterFactory:构建Retrofit时必须加GsonConverterFactory.create()(或对应解析器的Factory),没有的话Retrofit无法解析响应体,直接返回null。
  • 检查Retrofit实例是否为单例:如果多次构建实例且配置不全(比如漏加ConverterFactory),会导致解析失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 01:28:17