未解决的参考:在创建改造实例时改造

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) 
    


【讨论】:

以上是关于未解决的参考:在创建改造实例时改造的主要内容,如果未能解决你的问题,请参考以下文章

有没有一种方法可以使用改造来刷新带有计时器的令牌?

我无法使用改造上传图片

未找到改造注释。 (参数#1)

如何从包含android中API响应的缓存中获取改造缓存数据

android 改造后注销请求给出错误 406 不可接受:用户未登录。...在邮递员 api 上工作正常

vue项目进行nuxt改造