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

