2017-11-21 15 views
0

私はこのAPIにGETリクエストを作成するとします。その代わりmyLatitudemyLongitudehttp://maps.googleapis.com/maps/api/geocode/json?latlng=myLatitude,myLongitude&sensor=trueRetrofitを使用してリクエストURLを作成するにはどうすればよいですか?

、私は自分の価値を配置する必要があります。以下は、私が改修を使用して要求を実行しようとしましたどのように見ることができます。

ApiInterface:

@GET("json?latlng={lat},{long}&sensor=true") 
Call<JsonArray> getApproximateLocations(@Query(value = "lat" , encoded = true) String lat, @Query(value = "long" , encoded = true) String lon); 

マイリクエスト:

Retrofit retrofit = new Retrofit.Builder().baseUrl(getString(R.string.location_base_api)).addConverterFactory(GsonConverterFactory.create()) 
      .build(); 


    ApiInterface apiInterface = retrofit.create(ApiInterface.class) ; 

    mapsApiInterface.getApproximateLocations(String.valueOf(lat),String.valueOf(lon)).enqueue(new Callback<JsonArray>() { 
     @Override 
     public void onResponse(Call<JsonArray> call, Response<JsonArray> response) { 

     } 

     @Override 
     public void onFailure(Call<JsonArray> call, Throwable throwable) { 

     } 
    }); 

私のベースURLは次のとおりです。http://maps.googleapis.com/maps/api/geocode/

このコードの結果、次のされたエラー:java.lang.IllegalArgumentException: URL query string "latlng={lat},{long}&sensor=true" must not have replace block. For dynamic query parameters use @Query.

だから、私はどのように問題を解決するために、このエラーを取得すると、なぜ?

答えて

1
@GET("json?latlng={lat},{long}&sensor=true") 
Call<JsonArray> getApproximateLocations(@Query(value = "lat" , encoded = true) String lat, @Query(value = "long" , encoded = true) String lon); 

は次のようにあるべきAPI です:

@GET("json") 
Call<JsonArray> getApproximateLocations(
    @Query(value = "latlng" , encoded = true) String latLng/* pass formatted string here (e.g. 2.1367,2.3199 */, 
    @Query(value = "sensor") boolean isSensor); 
+0

おかげで、働いていました。しかし、あなたの答えは、この質問につながります:私は長い間待っていたらどうすればいいですか?私はそれらのそれぞれの中に@GETを書く必要があるとは思わない。この場合、私は自分の場所に価値を置く必要があります。どのようにこの問題を解決しますか? – abay

+1

クエリパラメータは本当にシンプルで、 '?'の後のURLの各セグメントです。それらは '&'によって分割されています。 Retrofitを使用すると、パス、クエリパラメータ、URLなどを設定できます。あなたのメソッドでは、URLの動的部分を指定する必要があります。 @GET( "json?sensor = true")を置き、 "@Query(value =" sensor ")boolean isSensor"部分をメソッドシグネチャから削除することができます。クエリパラメータの順序は関係ありません。静的部分と動的部分を分離するだけです –

1

Do like this:

@GET(Constants.GET_ADDRESS_BY_LOCATION) 
    ServiceCall<Response> getAddress(@Query(Constants.PATH_LATLNG) String latlng, @Query(Constants.PATH_LANGUAGE) String language , @Query(Constants.KEY_GOOGLE_MAP_API) String key); 

GET_ADDRESS_BY_LOCATIONは他の定数はパラメータが必要とされている間

関連する問題