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

如何用Retrofit实现带动态参数的Strapi GET过滤请求?

解决Strapi API动态过滤EditText输入内容的问题

问题说明

基于Strapi构建GET API实现数据过滤,使用$containsi做不区分大小写的包含匹配,需要将请求中硬编码的"Forest"替换为EditText的动态输入值。

解决步骤

1. 修正Retrofit接口的参数注解

原代码中使用@Path注解是错误的,因为name是查询参数而非路径参数。应改用@Query注解传递动态过滤值,调整后的接口代码如下:

@GET("destinations?populate=*")
fun getSearchList(@Query("filters[name][\$containsi]") name: String): Call<ResponseDestination>

或者保留原URL的占位符写法,同步替换注解:

@GET("destinations?populate=*&filters[name][\$containsi]={name}")
fun getSearchList(@Query("name") name: String): Call<ResponseDestination>

2. 动态传入EditText的输入值

注意不要在页面初始化时直接获取EditText文本(此时为空),应在用户触发搜索动作(比如点击搜索按钮)时获取输入值并调用API。修改后的Activity代码:

// 绑定搜索按钮与EditText
val searchBtn = view.findViewById<Button>(R.id.btn_search)
val etText = view.findViewById<EditText>(R.id.et_text)

searchBtn.setOnClickListener {
    val inputText = etText.text.toString().trim()
    if (inputText.isNotEmpty()) {
        ApiConfigDestionation.getService().getSearchList(inputText).enqueue(object : Callback<ResponseDestination> {
            @SuppressLint("NotifyDataSetChanged")
            override fun onResponse(call: Call<ResponseDestination>, response: Response<ResponseDestination>) {
                val responseBody = response.body()
                val responseList = responseBody?.data
                val searchAdapter = ListAllAdapter(responseList)
                rv_destination.apply {
                    layoutManager = LinearLayoutManager(context)
                    setHasFixedSize(true)
                    adapter = searchAdapter
                }
            }

            override fun onFailure(call: Call<ResponseDestination>, t: Throwable) {
                Toast.makeText(context, t.localizedMessage, Toast.LENGTH_SHORT).show()
            }
        })
    } else {
        Toast.makeText(context, "请输入搜索内容", Toast.LENGTH_SHORT).show()
    }
}

return view

关键说明

根据Strapi官方文档(REST API过滤章节):

$containsi 用于执行不区分大小写的包含匹配,请求格式为 GET /api/[集合名]?filters[字段名][$containsi]=匹配值。在Retrofit中,这类查询参数需要用@Query注解传递动态值,而非@Path(@Path仅用于替换URL路径中的占位符,比如/users/{id}中的id)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:53:17