J'utilise des paramètres de requête pour définir les valeurs requises par l'API Google Maps.
Le problème est que je n'ai pas besoin du signe &
pour le premier paramètre de requête.
@GET("/maps/api/geocode/json?")
Call<JsonObject> getLocationInfo(@Query("address") String zipCode,
@Query("sensor") boolean sensor,
@Query("client") String client,
@Query("signature") String signature);
La modernisation génère:
&address=90210&sensor=false&client=gme-client&signature=signkey
ce qui provoque l'appel l'échec quand j'en ai besoin
address=90210&sensor=false&client=gme-client&signature=signkey
Comment puis-je réparer ça?
Si vous spécifiez @GET("foobar?a=5")
, toutes les @Query("b")
doivent être ajoutées à l'aide de &
, produisant un résultat similaire à foobar?a=5&b=7
.
Si vous spécifiez @GET("foobar")
, le premier @Query
doit être ajouté à l'aide de ?
, produisant quelque chose comme foobar?b=7
.
C'est comme ça que Retrofit fonctionne.
Lorsque vous spécifiez @GET("foobar?")
, Retrofit pense que vous avez déjà fourni un paramètre de requête et ajoute les paramètres de requête more à l'aide de &
.
Supprimez le ?
et vous obtiendrez le résultat souhaité.
Je suis nouveau à rénover et je l'apprécie. Voici donc un moyen simple de le comprendre pour ceux qui voudraient interroger avec plusieurs requêtes: Le? et & sont automatiquement ajoutés pour vous.
Interface:
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)
}
Cela s'appellera de cette façon. Considérant que vous avez déjà fait le reste du code.
Call<Results> call = service.productList("Whatever", "here", IService.API_KEY);
Par exemple, lorsqu'une requête est renvoyée, cela ressemblera à ceci.
//-> https://api.test.com/Search?one=Whatever&two=here&key=SFSDF24242353434
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)
}
Cela s'appellera de cette façon. Considérant que vous avez déjà fait le reste du code.
Call<Results> call = service.getUserDetails("[email protected]", "Password@123");
Par exemple, lorsqu'une requête est renvoyée, cela ressemblera à ceci.
https://api.demo.com/[email protected]&password=Password@123