web-dev-qa-db-ja.com

レトロフィット2-URLクエリパラメーター

クエリパラメータを使用して、Google Maps APIに必要な値を設定しています。

問題は、最初のクエリパラメータに&記号が必要ないことです。

@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

どうすれば修正できますか?

47
Alan

@GET("foobar?a=5")を指定する場合、&を使用して@Query("b")を追加し、foobar?a=5&b=7のようなものを作成する必要があります。

@GET("foobar")を指定する場合、最初の@Query?を使用して追加し、foobar?b=7のようなものを作成する必要があります。

それがレトロフィットの仕組みです。

@GET("foobar?")を指定すると、Retrofitはすでにいくつかのクエリパラメータを指定したとみなし、&を使用してmoreクエリパラメータを追加します。

?を削除すると、目的の結果が得られます。

72
Andreas

私はレトロフィットが初めてで、楽しんでいます。したがって、複数のクエリを使用してクエリを実行する必要がある人のために、これを理解する簡単な方法を次に示します。および&は自動的に追加されます。

インタフェース:

 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 
33
Taban Cosmos
 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]", "Password@123");

たとえば、クエリが返されると、次のようになります。

https://api.demo.com/[email protected]&password=Password@123
6
Keshav Gera