未解决的参考:在创建改造实例时改造
Posted
技术标签:
【中文标题】未解决的参考:在创建改造实例时改造【英文标题】:Unresolved reference : retrofit while creating retrofit instance 【发布时间】:2021-11-11 01:57:48 【问题描述】:我正在开发一个请求火星照片并使用它在屏幕上显示的 android 应用程序。 发出请求。并尝试使用公开延迟初始化改造服务的公共 Api 对象。 以下是有错误的源代码
import retrofit2.Retrofit
import retrofit2.converter.scalars.ScalarsConverterFactory
import retrofit2.http.GET
class MarsApiService
public val retrofit = Retrofit.Builder()
.addConverterFactory(ScalarsConverterFactory.create())
.baseUrl(Companion.BASE_URL)
.build()
interface MarsApiService
@GET("photos")
fun getPhotos(): String
object MarsApi
val retrofitService: MarsApiService by lazy retrofit.create(MarsApiService::class.java)
companion object
private const val BASE_URL = "https://android-kotlin-fun-mars-server.appspot.com"
对象 MarsApi 内的代码第 17 行弹出错误未解决的参考:改造。对 Retrofit 对象的 create() 函数调用成本很高,并且应用程序只需要一个 Retrofit API 服务实例。所以,我使用对象声明将服务暴露给应用程序的其余部分。
我尝试过的:
如果我将对象 MarsApi 中的代码带出,代码就可以工作,但这样做可能会导致多个改造实例。
【问题讨论】:
【参考方案1】:代码1
interface MarsApiService
@GET("photos")
suspend fun getPhotos(): String
companion object
private const val BASE_URL = "https://android-kotlin-fun-mars-server.appspot.com"
val marsApiService: MarsApiService by lazy
Retrofit.Builder()
.addConverterFactory(ScalarsConverterFactory.create())
.baseUrl(BASE_URL)
.build().create(MarsApiService::class.java)
代码2
private const val BASE_URL = "https://android-kotlin-fun-mars-server.appspot.com/"
private val retrofit = Retrofit.Builder()
.addConverterFactory(ScalarsConverterFactory.create())
.baseUrl(BASE_URL)
.build()
interface MarsApiService
@GET("photos")
suspend fun getPhotos(): String
object MarsApi
val marsApiService: MarsApiService by lazy retrofit.create(MarsApiService::class.java)
运行
fun main() = runBlocking
val rs = marsApiService.getPhotos()
println(rs)
在您的代码中,retrofit
bylazy reference notsolved cause of retrofit
is property
of class
,在全局范围内移动 retrofit
,就像使用 (Companion) object
或类似 code2 (最高等级?)
【讨论】:
link 查看上面的链接,它是关于如何使用改造的官方教程。这是怎么回事。 嘿,谢谢你,我在一个类中编写了整个代码,你的代码 2 帮助我弄清楚了。非常感谢【参考方案2】:希望this link
让您清楚对象和伴随对象之间的区别以及何时使用它们。快乐学习
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。【参考方案3】:我遇到了同样的问题。
我解决了它只是排除了MarsApiService
这个类
我也没有使用companion object
。
正确的代码在下面
import retrofit2.Retrofit
import retrofit2.converter.scalars.ScalarsConverterFactory
import retrofit2.http.GET
private const val BASE_URL = "https://android-kotlin-fun-mars-server.appspot.com"
public val retrofit = Retrofit.Builder()
.addConverterFactory(ScalarsConverterFactory.create())
.baseUrl(Companion.BASE_URL)
.build()
interface MarsApiService
@GET("photos")
fun getPhotos(): String
object MarsApi
val retrofitService: MarsApiService by lazy
retrofit.create(MarsApiService::class.java)
【讨论】:
以上是关于未解决的参考:在创建改造实例时改造的主要内容,如果未能解决你的问题,请参考以下文章
如何从包含android中API响应的缓存中获取改造缓存数据