【问题标题】:Retrofit2 parameters in Fragment using Kotlin使用 Kotlin 的 Fragment 中的 Retrofit2 参数
【发布时间】:2021-11-18 23:46:26
【问题描述】:

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

我在片段中有一个接口,并且有这样的@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。

【问题讨论】:

  • 在使用它之后,我发现我认为应该放置 getCID 函数的位置,它位于我的 createService() 函数中。编辑器没有抛出任何错误,并且找到了每个引用。但是,当我点击@Query 行时,应用程序将关闭。有什么想法吗? coderewardsApiService?.getCID("168","getrewardsavailable") code

标签: android kotlin retrofit


【解决方案1】:

简短的回答是:你不知道。 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 范围的协程内完成。

【讨论】:

  • 虽然我同意你回答的后半部分,但我认为它可能超出了 OP 正在寻找的范围,至少目前如此,但我想把它放在那里没有任何害处:)
  • 100% 同意这超出了范围,他确实说他是初学者,所以只是提供一些指导:)
  • 我知道这超出了范围,只是建议。再多费些功夫后,我发现我认为应该把 getCID 函数放在哪里。编辑器没有抛出任何错误,并且找到了每个引用。但是,当我点击@Query 行时,应用程序会关闭。
猜你喜欢
  • 2021-12-23
  • 2021-10-05
  • 1970-01-01
  • 2018-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多