【问题标题】:Kotlin Retrofit2 Enqueue "Unresolved reference Enqueue"Kotlin Retrofit2 Enqueue“未解决的参考入队”
【发布时间】:2020-05-12 02:58:39
【问题描述】:

您好,我收到了 Unresolved reference Enqueue 消息,并且没有可解决的选项。

回调是在片段中的按钮 setOnCLickListener 中进行的。

其他建议是将 Gradle 版本设置为 3.1.3(以前使用 3.6.1),但错误仍然存​​在。

        btnSearch.setOnClickListener {

            val service = RetrofitClientInstance.retrofitInstance?.create(GetFlightService::class.java)
            val call = service?.getFlightData(
                "QF",
                "642",
                "departing",
                "2020",
                "05",
                "09",
                "FS",
                "xxxxxxxxx",
                "xxxxxxxxxxxxxxxxxxxxxxxxxxx") //appID and appKey x'd out :)

            call?.enqueue(object : Callback<RetrievedFlightData>{
                override fun onResponse(
                    call: Call<RetrievedFlightData>,
                    response: Response<RetrievedFlightData>
                ) {
                    if (response.code() == 200) {

                        val flightDataBody = response.body()!!

                        val flightData: FlightDTO = getFlightDTOData(flightDataBody)

                    }
                }

                override fun onFailure(call: Call<RetrievedFlightData>, t: Throwable) {
                    TODO("Not yet implemented")
                    Toast.makeText(activity,"Error: Callback faliure - ${t.message}", Toast.LENGTH_LONG).show()

                }
            })

        }

界面是:

interface GetFlightService {


    @GET ("/flex/schedules/rest/v1/json/flight/")
    fun getFlightData(@Query("carrierFSCode") carrierFSCode: String,
                      @Query("flightNumber")flightNumber:String,
                      @Query("departing") departing:String,
                      @Query("year") year:String,
                      @Query("month") month:String,
                      @Query("day") day:String,
                      @Query("codeType") codeType: String,
                      @Query("appID") appID: String,
                      @Query("appKey") appKey:String


    )

}

和客户端实例

object RetrofitClientInstance {

    private var retrofit: Retrofit? = null

    private const val  BASE_URL = "https://api.flightstats.com"

    //create a retrofit instance, only if it has not been created yet.

    val retrofitInstance: Retrofit?
        get() {
            if (retrofit == null){
                retrofit = retrofit2.Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build()
            }

            return retrofit
        }
}

客户端实例工作正常,因为我进行了其他正常工作。

另一个问题是我需要等待回复才能继续。我之前曾在另一个电话中使用过 newSingleThreadExecutor,但我知道这不是最佳做法。对此的任何帮助也将不胜感激。

谢谢

乔布斯

【问题讨论】:

  • 我应该添加,我不知道它是否有区别,这发生在 onViewCreated 中。

标签: android-fragments kotlin retrofit2 enqueue


【解决方案1】:

将您的getFlightData() 更改为返回Call&lt;RetrievedFlightData&gt;。于是就变成了:

@GET ("/flex/schedules/rest/v1/json/flight/")
fun getFlightData(@Query("carrierFSCode") carrierFSCode: String,
                  @Query("flightNumber")flightNumber:String,
                  @Query("departing") departing:String,
                  @Query("year") year:String,
                  @Query("month") month:String,
                  @Query("day") day:String,
                  @Query("codeType") codeType: String,
                  @Query("appID") appID: String,
                  @Query("appKey") appKey:String
): Call<RetrievedFlightData>

【讨论】:

  • 感谢@Saurabh 指出显而易见的事情。欣赏它。在继续之前等待响应的方式如何。
  • @jcbird 无论您在收到响应后需要运行什么代码,都可以在 Retrofit 回调的 onResponse 方法中编写该代码。
  • 有些事情比你想象的要简单。再次感谢
猜你喜欢
  • 2018-10-25
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 2018-10-16
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多