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

Android Studio中Retrofit GET请求异常:非空响应触发onFailure

问题根源分析

兄弟,从你贴的日志错误和JSON响应来看,核心问题很明确:
接口返回的reservationDate是字符串格式(比如"2019-10-30"),但你的ScheduleModel里用了Java 8的LocalDate类型——而Gson默认根本不支持把字符串直接转成LocalDate对象!
这就导致:当响应体有数据时,Gson解析到reservationDate字段直接卡壳,触发了Retrofit的onFailure;而响应体为空时没东西要解析,所以能顺利进入onResponse。

解决方案

给你两个靠谱的解决办法,按需选就行:

方法1:给Gson加LocalDate解析适配器(推荐长期用)

Gson本身不支持Java 8的日期API,得加个适配器来处理LocalDate的序列化和反序列化。

第一步:添加依赖

在Module级别的build.gradle里加入这两个依赖:

implementation 'com.google.code.gson:gson:2.10.1'
implementation 'com.google.gson:gson-type-adapters:2.10.1'

第二步:修改Retrofit的Gson配置

把你ScheduleService里创建Retrofit的代码改成这样,注册LocalDate的适配器:

companion object {
    fun create(): ScheduleService{
        // 先创建支持LocalDate解析的Gson实例
        val gson = GsonBuilder()
            .registerTypeAdapter(LocalDate::class.java, LocalDateTypeAdapter())
            .create()
            
        val retrofit = Retrofit.Builder()
            .baseUrl("myUrl")
            .addConverterFactory(GsonConverterFactory.create(gson))
            .build()
        return retrofit.create(ScheduleService::class.java)
    }
}

这样Gson就能自动把接口返回的日期字符串转成LocalDate对象,完美解决解析问题。

方法2:先改成String类型临时救急

如果不想折腾依赖,先把数据类里的reservationDate改成String,先确保请求能拿到数据,之后再手动转成LocalDate:

data class ScheduleModel(
    val id: Int,
    val reservationDate: String // 把LocalDate换成String类型
)

拿到数据后手动转换日期:

override fun onResponse(call: Call<List<ScheduleModel>>, response: Response<List<ScheduleModel>>) {
    if (response.code() == 200) {
        response.body()?.forEach { schedule ->
            // 手动将字符串转为LocalDate
            val localDate = LocalDate.parse(schedule.reservationDate)
            // 这里处理你的业务逻辑
        }
        Toast.makeText(applicationContext, "It's ok", Toast.LENGTH_SHORT).show()
    }
}
额外提个醒

你接口返回的id是字符串"4",但数据类里定义的是Int——Gson默认能把数字字符串转成Int,一般没问题,但如果以后接口返回非数字的id就会报错,建议如果接口的id是字符串类型,最好把数据类的id也改成String哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:43:51