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。