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

