Как правильно установить параметры дооснащения

Я пытаюсь создать приложение «Погода» с помощью Retrofit 2, и теперь мне трудно правильно настроить вызов.

Вот рабочий URL:

http://api.openweathermap.org/data/2.5/weather?q=London&APPID=MY_API_KEY

Итак, у меня есть ключ API, а БАЗОВЫЙ URL-адрес: http://api.openweathermap.org. . Это метод моей услуги по модернизации:

    @GET("/data/2.5/weather?q={city}/&APPID={api}")
    Observable<WeatherResponse> getWeather(@Path("city") String city, @Path("api") String api);

И ошибка, которую я получаю:

java.lang.IllegalArgumentException: строка запроса URL "q = {city} / & APPID = {api}" не должна иметь блока замены. Для параметров динамического запроса используйте @Query.

Итак, я попробовал вот так:

@GET("/data/2.5/weather?{city}/&APPID={api}")
Observable<WeatherResponse> getWeather(@Query("city") String city, @Path("api") String api);

И я получаю ту же ошибку ... Кто-нибудь знает, в чем дело, что не так с моим URL-адресом?


person joe    schedule 07.01.2017    source источник


Ответы (1)


Сделайте это так:

@GET("/data/2.5/weather")
Observable<WeatherResponse> getWeather(@Query("q") String city, @Query("APPID") String api);

Нет необходимости вручную вводить значения параметров в Retrofit - вам нужно только указать ему, каковы имена параметров

person Tomasz Czura    schedule 07.01.2017
comment
Теперь я получаю эту ошибку: java.lang.IllegalArgumentException: параметр Path не должен идти после запроса. ... Вы знаете, почему путь не может идти после запроса? - person joe; 07.01.2017
comment
Извините, моя ошибка - в вашем запросе должны быть только аннотации Query. Путь используется, когда вы хотите вставить параметр в середину запросов, например, какой-то id: /get/users/1/info - там 1 идентификатор, а в Retrofit будет использоваться Путь (id): /get/users/{id}/info - person Tomasz Czura; 07.01.2017
comment
человек, вы спасли мои выходные с помощью аргумента @Path для вставки запросов посередине - person Tonnie; 12.07.2020