You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin Fragment中使用Retrofit2调用接口时@Query参数的定义赋值问题

首先修正你当前接口定义的问题:getCID方法没有指定返回值,Retrofit无法识别为合法的请求方法,先补全返回类型:

interface RewardsApiService {
    @GET("JSON/return-data.asp")
    // 替换YourResultClass为该接口实际返回的响应实体类
    fun getCID(
        @Query("cid") strCustomerID: String,
        @Query("process") strProcess: String
    ): retrofit2.Call<ResponseData<YourResultClass>>

    fun getRewards(): retrofit2.Call<ResponseData<List<RewardsCards>>>
}

参数赋值方式

两个参数都是在你发起请求、调用getCID方法的时候传入,具体流程如下:

  1. 在Fragment中读取SharedPreference存储的strCustomerID,同时按业务需求给strProcess赋值
// 替换为你实际使用的SP文件名、存储cid对应的key
val sharedPref = requireContext().getSharedPreferences("你的SP配置文件名", Context.MODE_PRIVATE)
val strCustomerID = sharedPref.getString("你存cid的key", "") ?: ""
// strProcess根据业务逻辑赋值,比如固定值或者从其他业务模块获取
val strProcess = "对应业务参数值"
  1. 调用接口传参
    在你已经初始化好的RewardsApiService实例上调用getCID方法,把上面拿到的两个参数传进去即可,后续请求逻辑和你调用无参的getRewards完全一致:
// 假设你已经完成Retrofit初始化,拿到了apiService实例
val cidCall = apiService.getCID(strCustomerID, strProcess)
// 发起异步请求示例
cidCall.enqueue(object : retrofit2.Callback<ResponseData<YourResultClass>> {
    override fun onResponse(
        call: retrofit2.Call<ResponseData<YourResultClass>>,
        response: retrofit2.Response<ResponseData<YourResultClass>>
    ) {
        // 处理接口响应逻辑
    }

    override fun onFailure(call: retrofit2.Call<ResponseData<YourResultClass>>, t: Throwable) {
        // 处理请求失败逻辑
    }
})

补充注意点

  • 如果多个场景需要读取cid,可以单独封装一个SharedPreference工具类,避免重复写读取代码
  • 调用接口前可以加一层非空判断,避免strCustomerID为空的情况下发起无效请求
  • 所有Retrofit接口方法的参数,都是在调用方法时动态传入,不需要在接口定义阶段赋值

内容的提问来源于stack exchange,提问作者Steve Rauco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:27:03