2016-04-19 19 views
15

Używam parametrów zapytania do ustawienia wartości wymaganych przez interfejs API Map Google.Retrofit 2 - parametr zapytania adresu URL

Problem polega na tym, że nie potrzebuję znaku & dla pierwszego parametru zapytania.

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

Modernizacja generuje:

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

który powoduje wywołanie fail kiedy muszę go mieć

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

Jak mogę rozwiązać ten problem?

Odpowiedz

20

Jeśli podasz @GET("foobar?a=5"), należy dodać @Query("b") przy użyciu &, tworząc coś takiego jak foobar?a=5&b=7.

Jeśli podasz @GET("foobar"), pierwszy @Query musi być dołączony przy użyciu ?, tworząc coś takiego jak foobar?b=7.

W ten sposób działa funkcja Retrofit.

Po określeniu @GET("foobar?"), Modernizacja myśli, że już dał jakiś parametr zapytania, i dołącza więcej parametrów zapytania używając &.

Usuń ?, a otrzymasz żądany wynik.

+0

to działa. Czy masz jakieś dobre zasoby na temat struktury adresów URL i wszystkich typów parametrów? Nie jestem pewien, jakie dobre słowo kluczowe należy wyszukać. – Alan

+1

Wyszukaj 'URL', a znajdziesz https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax – Andreas

7

Jestem nowy w modernizacji i cieszę się z tego. Oto prosty sposób na zrozumienie go dla tych, którzy mogą chcieć zadać więcej niż jedno zapytanie: The? i & są automatycznie dodawane dla ciebie.

Interfejs:

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) 
} 

będzie się nazywać w ten sposób. Biorąc pod uwagę, że zrobiłeś już resztę kodu.

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

Na przykład po zwróceniu zapytania będzie wyglądać następująco.

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

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) 

}

on zostanie wywołana w ten sposób. Biorąc pod uwagę, że zrobiłeś już resztę kodu.

Wywołanie połączenia = service.authenticateUser ("[email protected]", "Hasło @ 123");

Na przykład po zwróceniu zapytania będzie wyglądać następująco.

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

Powiązane problemy