首页 > 解决方案 > 使用 Kotlin 的 Fragment 中的 Retrofit2 参数

问题描述

只要没有参数,我就可以毫无障碍地拨打电话。我知道,作为应用程序编程的初学者,这将是我错过的一件非常简单的事情,或者是一件过于复杂的事情,但这里就是这样。

我在片段中有一个接口,并且有这样的@Query:

interface RewardsApiService {
    @GET("JSON/return-data.asp")
    fun getCID(
        @Query("cid") strCustomerID: String,
        @Query("process") strProcess: String
    )
    fun getRewards(): retrofit2.Call<ResponseData<List<RewardsCards>>>
}

我的问题是:我在哪里定义和分配这些变量 strCustomerID 和 strProcess,以便接口可以使用它们?strCustomerID 是一个 SharedPreference。

标签: androidkotlinretrofit

解决方案


简短的回答是:你没有。Retrofit 会根据你用 , 等标记的内容自动生成@GET代码@Query

你应该这样称呼它:

val call = service.getCID("foo", "bar")

然而,生成的调用将 url 看起来像这样: [your base url]/JSON/return-data.asp?cid=foo?process=bar 所以请确保 url 与您想要的匹配。


除了改造特定的东西之外,还有一些更深层次的架构问题。我会看看https://developer.android.com/jetpack/guide并考虑稍微重组项目。

例如,您不想从片段中进行 API 调用。这引起了对可能在主线程或 UI 线程上执行 IO 的担忧,并且您最终可能会试图找出围绕它的崩溃。

至少,我建议将接口拆分到一个单独的文件中,并确保您的网络调用是在具有 IO 范围的协程内完成的。


推荐阅读