Retrofit 2 - URL Query Parameter
If you specify @GET("foobar?a=5")
, then any @Query("b")
must be appended using &
, producing something like foobar?a=5&b=7
.
If you specify @GET("foobar")
, then the first @Query
must be appended using ?
, producing something like foobar?b=7
.
That's how Retrofit works.
When you specify @GET("foobar?")
, Retrofit thinks you already gave some query parameter, and appends more query parameters using &
.
Remove the ?
, and you will get the desired result.
I am new to retrofit and I am enjoying it. So here is a simple way to understand it for those that might want to query with more than one query: The ? and & are automatically added for you.
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)}
It will be called this way. Considering you did the rest of the code already.
Call<Results> call = service.productList("Whatever", "here", IService.API_KEY);
For example, when a query is returned, it will look like this.
//-> https://api.test.com/Search?one=Whatever&two=here&key=SFSDF24242353434
Link to full project: Please star etc: https://github.com/Cosmos-it/ILoveZappos
If you found this useful, don't forget to star it please. :)
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)}
It will be called this way. Considering you did the rest of the code already.
Call<Results> call = service.getUserDetails("abc@gmail.com", "Password@123");
For example when a query is returned, it will look like this.
https://api.demo.com/Login?email=abc@gmail.com&password=Password@123