gpt4 book ai didi

Android - 改造 - 基本网址中缺少查询参数

转载 作者:行者123 更新时间:2023-11-29 18:33:13 28 4
gpt4 key购买 nike

我正在使用 Dagger2 + Retrofit + RxAndroid + OkHttp3 + 新架构组件开发一个 Android 应用程序。 最小 sdk = 16

问题:在 API 16 上运行应用程序时,生成的 Url 不正确。 Url 缺少我通过 Retrofit 传递的 @QueryMap 参数。当我在 api 级别 21+ 上测试应用程序时,同样工作正常。

正确的网址 -在 api 21+ - “http://api.apixu.com/v1/forecast.json?q=IDR&days=10&key=apikey

在 api 16/19 上生成的 url - "http://api.apixu.com/v1/forecast.json "

改造界面 -

@GET("forecast.json")
fun fetchWeatherDetails(
@QueryMap hashMap: @NotNull HashMap<String, String>
): @NotNull Observable<ApiResponse>

改造生成器 -

val httpClient = getOkHttpClient()
return Retrofit.Builder()
.baseUrl(apiBaseUrl)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(httpClient)
.build()

OkHttpClient -

val builder = OkHttpClient.Builder()
builder
.cache(cache)
.connectTimeout(60, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.followRedirects(true)
.followSslRedirects(true)

val httpLoggingInterceptor = HttpLoggingInterceptor()

if (BuildConfig.DEBUG) {
httpLoggingInterceptor.level = HttpLoggingInterceptor.Level.BODY
} else {
httpLoggingInterceptor.level = HttpLoggingInterceptor.Level.NONE
}

builder.addInterceptor(HeaderInterceptor())
.addInterceptor(httpLoggingInterceptor)
return builder.build()

卡在这个问题已经2天多了。任何帮助将不胜感激。

更新:Api 查询代码在 API 21+ 上运行良好。

API-16 和 API-19 失败。

最佳答案

很明显,您的 URL 没有编码,为此您需要确保使用 @QueryMap(encoded = true) 在所有平台上对其进行编码。

如果不成功,恐怕您需要手动使用自定义 拦截器 来编码这样的字符,例如 ? 等于 % 3F,例如:

@Override
Response intercept(Interceptor.Chain chain) throws IOException {
Request request = chain.request()
def string = request.url().toString()
string = string.replace("%26", "&")
string = string.replace("%3D", "=")
string = string.replace("%3F", "?")

Request newRequest = new Request.Builder()
.url(string)
.build()

return chain.proceed(newRequest)
}

引用资料:

关于Android - 改造 - 基本网址中缺少查询参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55256964/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com