我想为此API创建GET
请求:http://maps.googleapis.com/maps/api/geocode/json?latlng=myLatitude,myLongitude&sensor=true
我需要放置自己的值,而不是myLatitude
和myLongitude
。您可以在下面看到我尝试使用Retrofit进行请求:
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) {
}
});
我的基本网址是: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.
那么,为什么我会收到此错误以及如何解决问题?
答案 0 :(得分:1)
这样做:
@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 是API 而其他常数是必需的参数
答案 1 :(得分: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);
应该是:
@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);