Подтвердить что ты не робот

Модернизация 2 - Параметр URL-адреса

Я использую параметры запроса для установки значений, необходимых API Карт Google.

Проблема заключается в том, что для первого параметра запроса мне не нужен знак &.

@GET("/maps/api/geocode/json?")
    Call<JsonObject> getLocationInfo(@Query("address") String zipCode,
                                             @Query("sensor") boolean sensor,
                                             @Query("client") String client,
                                             @Query("signature") String signature);

Дооснащение:

&address=90210&sensor=false&client=gme-client&signature=signkey

который вызывает вызов сбой, когда мне это нужно

address=90210&sensor=false&client=gme-client&signature=signkey

Как это исправить?

4b9b3361

Ответ 1

Если вы укажете @GET("foobar?a=5"), то любой @Query("b") должен быть добавлен с помощью &, создавая что-то вроде foobar?a=5&b=7.

Если вы укажете @GET("foobar"), то первый @Query должен быть добавлен с помощью ?, создавая что-то вроде foobar?b=7.

Как работает Retrofit.

Когда вы укажете @GET("foobar?"), Retrofit считает, что вы уже дали некоторый параметр запроса, и добавляет больше параметров запроса с помощью &.

Удалите ?, и вы получите желаемый результат.

Ответ 2

Я новичок в модернизации, и мне это нравится. Итак, вот простой способ понять это для тех, кто может запросить несколько запросов:? и автоматически добавляются для вас.

Интерфейс:

 public interface IService {

      String BASE_URL = "https://api.test.com/";
      String API_KEY = "SFSDF24242353434";

      @GET("Search") //i.e https://api.test.com/Search?
      Call<Products> getProducts(@Query("one") String one, @Query("two") String two,    
                                @Query("key") String key)
}

Он будет называться таким образом. Учитывая, что вы сделали остальную часть кода уже.

  Call<Results> call = service.productList("Whatever", "here", IService.API_KEY);

Например, когда запрос возвращается, он будет выглядеть следующим образом.

//-> https://api.test.com/Search?one=Whatever&two=here&key=SFSDF24242353434 

Ответ 3

 public interface IService { 

  String BASE_URL = "https://api.demo.com/";

  @GET("Login") //i.e https://api.demo.com/Search? 
  Call<Products> getUserDetails(@Query("email") String emailID, @Query("password") String password)

} 

Это будет называться так. Учитывая, что вы сделали остальную часть кода уже.

Call<Results> call = service.getUserDetails("[email protected]", "[email protected]");

Например, когда возвращается запрос, он будет выглядеть следующим образом.

https://api.demo.com/[email protected]&[email protected]