Android 改装拦截器,不向URL添加查询参数

Android 改装拦截器,不向URL添加查询参数,android,kotlin,retrofit,Android,Kotlin,Retrofit,我试图使用自定义拦截器在URL中添加apikey,但它没有在URL中添加参数,因此响应正文为空 客户拦截器 class CustomInterceptor : Interceptor { override fun intercept(chain: Interceptor.Chain): Response { val url = chain.request().url().newBuilder() .addQueryParameter("apiK

我试图使用自定义
拦截器在URL中添加apikey,但它没有在URL中添加参数,因此响应正文为空

客户拦截器

class CustomInterceptor : Interceptor {

    override fun intercept(chain: Interceptor.Chain): Response {

        val url = chain.request().url().newBuilder()
            .addQueryParameter("apiKey", API_KEY)
            .build()

        val request = chain.request().newBuilder()
            .url(url)
            .build()

        return chain.proceed(request)
    }
}
客户端

class Client {

    companion object {

        const val API_KEY = "123123"
        private const val apiUrl = "https://www.omdbapi.com/"

        fun <T> create(service: Class<T>): T {
            val client = OkHttpClient.Builder()
                .addInterceptor(CustomInterceptor())
                .build()

            return Retrofit.Builder()
                .baseUrl(apiUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .client(client)
                .build()
                .create(service)
        }
    }
}
类客户端{
伴星{
const val API_KEY=“123123”
private const val apirl=”https://www.omdbapi.com/"
趣味创造(服务类):T{
val client=OkHttpClient.Builder()
.addInterceptor(CustomInterceptor())
.build()
return reformation.Builder()
.baseUrl(apiUrl)
.addConverterFactory(GsonConverterFactory.create())
.客户(客户)
.build()
.创建(服务)
}
}
}
IMovie

interface IMovie {

    @GET("/")
    fun searchMovie(@Query("s") query: String): Call<SearchResult>
}
接口IMovie{
@获取(“/”)
趣味searchMovie(@Query(“s”)Query:String):调用
}
发送请求后,响应主体为null,这是

实际网址:-


预期URL:-

首先从现有请求创建一个新的httpUrl实例,添加查询参数和值:

var request=chain.request()

val httpUrl=request.url().newBuilder().addQueryParameter(“token”,authttoken).build()

然后更新请求:

request=request.newBuilder().url(httpUrl.build()

并继续进行:

返回链。继续(请求)

  • 当您从链中调用请求(您在操作后继续处理的请求)时,您将再次获得未修改的请求

为什么不干脆
val request=chain.request().newBuilder().addQueryParameter(“apiKey”,API_KEY).build()
?为什么是两个建筑工人?嗯。。它没有像你建议的那样工作。我只是通过拦截器添加了标题,而不是查询参数。改造可能会忽略任何预先建立的查询参数。你可以查看改装问题跟踪程序,看看是否有关于这类事情的讨论。
val request=chain.request().newBuilder().addQueryParameter(“apiKey”,API_KEY)。build()
上显示错误。addQueryParameter
啊,我知道哪里出了问题了——你的第一个构建器是
HttpUrl.builder
,不是
请求.Builder
。我为那个错误道歉。这强化了我的猜测,即改型只是忽略了请求URL上提供的任何查询参数。当我更新版本时,它起到了作用。但是,当我注销URL时,它仍然显示相同的URL。