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

Retrofit如何将EditText获取的值传入GET接口@Path参数

Retrofit动态传入@Path参数实现方案

你只需要在调用接口方法时将获取到的动态值作为入参传入,@Path注解会自动将入参替换到URL对应的占位符位置,不需要额外修改注解配置,具体实现步骤如下:

1. 接口定义调整(可选但推荐)

你在接口参数上设置的Kotlin默认值仅在Kotlin代码调用不传参时生效,Retrofit本身不会读取这个硬编码值作为请求参数。如果不需要无参调用的场景,建议直接去掉默认值避免后续误用:

interface CodeService {
    @GET("sro-rastro/{code}")
    fun list(@Path("code") code: String): Call<Code> 
}

如果要保留默认值也完全不影响动态传参,调用时主动传入参数会直接覆盖默认值。

2. 提前初始化Retrofit服务实例

确保你已经初始化过Retrofit并生成了CodeService的实例,若还未初始化可以参考如下配置(已完成可跳过):

// 建议放在统一网络管理类中,或Activity的onCreate生命周期内初始化
val retrofit = Retrofit.Builder()
    .baseUrl("替换为你的接口根地址,注意必须以/结尾")
    .addConverterFactory(GsonConverterFactory.create()) // 替换为你项目使用的解析转换器
    .build()

private val codeService = retrofit.create(CodeService::class.java)

3. 点击事件中传参发起请求

拿到输入框的值后先做非空校验,再将值传入接口方法,通过异步方式发起请求即可:

binding.btNewPackage.setOnClickListener {
    val trackingNumber = binding.etTrackingNumber.text.toString().trim()
    // 空输入拦截
    if (trackingNumber.isEmpty()) {
        Toast.makeText(this, "请输入物流单号", Toast.LENGTH_SHORT).show()
        return@setOnClickListener
    }
    // 传入动态参数发起异步请求
    codeService.list(trackingNumber).enqueue(object : Callback<Code> {
        override fun onResponse(call: Call<Code>, response: Response<Code>) {
            if (response.isSuccessful) {
                val result = response.body()
                // 在此处处理请求成功逻辑,比如解析返回结果、更新UI
            } else {
                // 处理服务端返回的错误,比如404、500、参数错误等
            }
        }

        override fun onFailure(call: Call<Code>, t: Throwable) {
            // 处理本地网络异常,比如无网络、连接超时、域名解析失败等
        }
    })
}

注意:不要在主线程直接调用execute()方法发起同步请求,会触发NetworkOnMainThreadException崩溃;enqueue()是异步请求方法,回调默认切回主线程,可以直接更新UI。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:45:43