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

OkHttp3与Retrofit Headers类型冲突问题求助

解决Retrofit响应头类型不匹配问题

问题根源

你混淆了Retrofit体系中两个完全不同的Headers类:

  • retrofit2.http.Headers:仅作为接口请求头的注解类使用(比如给Retrofit接口方法添加请求头规则),不能用来存储实际的响应头数据。
  • okhttp3.Headers:Retrofit底层依赖OkHttp实现网络请求,响应头实际返回的是这个类的实例,用于存储真实的请求/响应头键值对。

解决方案

1. 修改GlobalClass的类型定义

将responseHeaders的类型改为okhttp3.Headers,同时修正初始化方式(OkHttp的Headers不支持无参构造,需用Builder生成空实例):

package com.example.appfacul
import android.app.Application
import okhttp3.Headers // 替换原Retrofit的Headers导入

class GlobalClass:Application() {
  var globalUserName = "test"
  var email = ""
  var id = ""
  var responseHeaders = Headers.Builder().build() // 初始化空Headers实例
}

2. 修正GlobalClass的获取方式

你直接val globalClass = GlobalClass()是错误的,Application子类不能手动实例化,必须通过上下文获取全局单例:

override fun onResponse(
    call: Call<AutenticationResponse>,
    response: Response<AutenticationResponse>
) {
    // 通过上下文获取全局Application实例
    val globalClass = applicationContext as GlobalClass
    val resultHeader = response.headers()
    globalClass.responseHeaders = resultHeader
}

3. 确认导入的Headers类正确

在处理响应头的类中,确保导入的是okhttp3.Headers,若IDE自动导入错误,可手动修改导入语句。

内容的提问来源于stack exchange,提问作者Paulo Henrique Neves

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:31:17