未解决的参考:在创建改造实例时进行改造
Unresolved reference : retrofit while creating retrofit instance
我正在开发一个 android 应用程序,该应用程序请求火星照片并使用它在屏幕上显示。
使 request.And 尝试使用 A public Api 对象来公开惰性初始化的 Retrofit 服务。
下面是有错误的源代码
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"
}
}
第17行代码inside object MarsApi弹出错误Unresolved reference: retrofit。对 Retrofit 对象的 create() 函数的调用非常昂贵,应用程序只需要一个 Retrofit API 服务实例。因此,我使用对象声明将服务暴露给应用程序的其余部分。
我试过的:
如果我将对象 MarsApi 中的代码带出,代码可以正常工作,但这样做可能会导致多次改造实例。
code1
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)
}
}
}
code2
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
通过惰性引用未解决 retrofit
的原因是 class
的 property
,像使用 [ 一样全局移动 retrofit
=18=] 或类似 code2(最高等级?)
让你清楚object和companion object的区别以及何时使用它们。快乐学习
我遇到了同样的问题。
我解决了它只是排除了 class 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 应用程序,该应用程序请求火星照片并使用它在屏幕上显示。 使 request.And 尝试使用 A public Api 对象来公开惰性初始化的 Retrofit 服务。 下面是有错误的源代码
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"
}
}
第17行代码inside object MarsApi弹出错误Unresolved reference: retrofit。对 Retrofit 对象的 create() 函数的调用非常昂贵,应用程序只需要一个 Retrofit API 服务实例。因此,我使用对象声明将服务暴露给应用程序的其余部分。
我试过的:
如果我将对象 MarsApi 中的代码带出,代码可以正常工作,但这样做可能会导致多次改造实例。
code1
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)
}
}
}
code2
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
通过惰性引用未解决 retrofit
的原因是 class
的 property
,像使用 [ 一样全局移动 retrofit
=18=] 或类似 code2(最高等级?)
让你清楚object和companion object的区别以及何时使用它们。快乐学习
我遇到了同样的问题。
我解决了它只是排除了 class 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)
}
}