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

Android开发创建Retrofit实例报Unresolved reference: retrofit错误如何解决

问题根因

你当前的代码存在嵌套结构混乱问题,是报错的核心原因:

  • retrofit实例被定义为MarsApiService类的非静态成员变量,必须实例化MarsApiService类才能访问到该变量,但MarsApi单例对象直接引用retrofit,自然会报未找到引用的错误
  • 你在MarsApiService类内部又重复定义了重名的MarsApiService接口、MarsApi单例、伴生对象,多层嵌套导致作用域引用异常
修复方案

以下代码既保证全局仅生成一个Retrofit实例和服务实例,又能解决报错问题:

import retrofit2.Retrofit
import retrofit2.converter.scalars.ScalarsConverterFactory
import retrofit2.http.GET

// 单独定义Retrofit服务接口
interface MarsApiService {
    @GET("photos")
    suspend fun getPhotos(): String 
    // 注意:Retrofit 2.6+ 如需直接返回结果需加suspend关键字配合协程使用,无需协程则改为返回Call<String>即可
}

// 单例对象统一管理实例,全局唯一
object MarsApi {
    private const val BASE_URL = "https://android-kotlin-fun-mars-server.appspot.com"

    // 懒加载Retrofit实例,仅首次使用时初始化一次
    private val retrofit: Retrofit by lazy {
        Retrofit.Builder()
            .addConverterFactory(ScalarsConverterFactory.create())
            .baseUrl(BASE_URL)
            .build()
    }

    // 懒加载服务实例,仅首次使用时初始化一次
    val retrofitService: MarsApiService by lazy {
        retrofit.create(MarsApiService::class.java)
    }
}

业务模块调用时直接使用MarsApi.retrofitService即可,不需要关心内部初始化逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:06:00