android api get retrofit robospice

android - Retrofit: múltiples parámetros de consulta en el comando @GET?



api robospice (3)

Estoy usando Retrofit y Robospice para hacer llamadas a la API en mi aplicación de Android. Todos los métodos @POST funcionan muy bien, al igual que los comandos @GET sin ningún parámetro en la URL, ¡pero no puedo obtener ninguna llamada @GET para trabajar con parámetros al final!

Por ejemplo, si mi ruta API era "my / api / call /" y quería 2 parámetros "param1" y "param2" en la URL, la llamada a get se vería así:

http://www.example.com/my/api/call?param1=value1&param2=value2

así que configuré mi interfaz de @GET así:

@GET("/my/api/call?param1={p1}&param2={p2}") Response getMyThing(@Path("p1") String param1, @Path("p2") String param2);

pero me sale un error al decir
"Se produjo una excepción durante la ejecución de la solicitud de red: cadena de consulta URL" /my/api/call?param1={p1}&param2={p2} "en el método getMyThing puede no haber reemplazado el bloque."

¿Qué estoy haciendo mal?


Deberías usar esta sintaxis:

@GET("/my/API/call") Response getMyThing( @Query("param1") String param1, @Query("param2") String param2);

La especificación de parámetros de consulta en la URL solo se aplica cuando conoce tanto la clave como el valor y están corregidos.


No escriba sus parámetros de consulta en GET-URL. Hazlo asi:

@GET("/my/api/call") Response getMyThing(@Query("param1") String param1, @Query("param2") String param2);


Si tiene un grupo de parámetros GET, otra forma de pasarlos a su url es un HashMap.

class YourActivity extends Activity { private static final String BASEPATH = "http://www.example.com"; private interface API { @GET("/thing") void getMyThing(@QueryMap Map<String, String>, new Callback<String> callback); } public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_layout); RestAdapter rest = new RestAdapter.Builder().setEndpoint(BASEPATH).build(); API service = rest.create(API.class); Map<String, String> params = new HashMap<String, String>(); params.put("foo", "bar"); params.put("baz", "qux"); // ... as much as you need. service.getMyThing(params, new Callback<String>() { // ... do some stuff here. }); } }

La URL llamada será http://www.example.com/thing/?foo=bar&baz=qux