Я работаю над приложением для Android, используя Dagger2 + Retrofit + RxAndroid + OkHttp3 + Новые компоненты архитектуры. Мин. SDK = 16 .
Проблема: при запуске приложения в API 16 генерирование URL-адреса происходит некорректно. В URL отсутствуют параметры @QueryMap, которые я передаю через Retrofit. То же самое работает нормально, когда я тестирую приложение на уровне API 21+.
Правильный URL -
на API 21+ - "http://api.apixu.com/v1/forecast.json?q=IDR&days=10&key=apikey"
URL, созданный на API 16/19 - "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.