Java Google Places API:错误400:(错误请求)
我正在尝试创建一个android应用程序,它利用Google Places API,但我希望它列出一种目前不受支持的地方。我知道我可以通过应用程序添加位置,但我在这样做时遇到了问题。我不断得到以下错误: 错误400:(错误请求) 您的客户端发出了格式错误或非法的请求 我搜索了所有关于向PlacesAPI提交添加请求的工作示例,但似乎找不到任何可以说明我做错了什么的东西。下面是我尝试过的代码,我在多个网站上找到了这些代码,但它们似乎也无法正常工作:Java Google Places API:错误400:(错误请求),java,android,google-places-api,Java,Android,Google Places Api,我正在尝试创建一个android应用程序,它利用Google Places API,但我希望它列出一种目前不受支持的地方。我知道我可以通过应用程序添加位置,但我在这样做时遇到了问题。我不断得到以下错误: 错误400:(错误请求) 您的客户端发出了格式错误或非法的请求 我搜索了所有关于向PlacesAPI提交添加请求的工作示例,但似乎找不到任何可以说明我做错了什么的东西。下面是我尝试过的代码,我在多个网站上找到了这些代码,但它们似乎也无法正常工作: private static final Str
private static final String PLACE_ADD_URL = "https://maps.googleapis.com/maps/api/place/add/json?";
public PlacesList addPlace() throws Exception {
try {
Log.v(LOG_KEY,"Adding Place...");
GenericUrl reqUrl = new GenericUrl(PLACE_ADD_URL);
reqUrl.put("key", API_KEY);
Log.v(LOG_KEY, "Adding Place...");
reqUrl.put("Host: maps.googleapis.com","{\"location\":{\"lat\":39.977112,\"lng\":-74.182799},\"accuracy\":50.0,\"name\":\"Artisan's Brewery & Italian Grill\",\"types\":[\"other\"],\"language\":\"en\":HTTP/1.1}");
Log.v(LOG_KEY, "Requested URL= " + reqUrl);
HttpRequestFactory httpRequestFactory = createRequestFactory(HTTP_TRANSPORT);
HttpRequest request = httpRequestFactory.buildGetRequest(reqUrl);
Log.v(LOG_KEY, request.execute().parseAsString());
PlacesList place = request.execute().parseAs(PlacesList.class);
Log.v(LOG_KEY, "STATUS = " + place.status);
Log.v(LOG_KEY, "Place Added is = " + place);
return place;
} catch (HttpResponseException e) {
Log.v(LOG_KEY, e.getMessage());
throw e;
}
catch (IOException e) {
// TODO: handle exception
throw e;
}
}
以下是最终对我有用的东西
public JSONObject addPlace() throws Exception {
try {
Log.v(LOG_KEY,"Adding Place...");
String nameAdd = "NAME"; // Enter Place Name
String typeAdd = "TYPE"; //Enter Place Type
double lat = 00.0000; //Enter Place Latitude
double lng = -00.00000; //Enter Place Longitude
HttpPost post = new HttpPost(PLACE_ADD_URL);
String postBody =
"{"+
"\"location\": {" +
"\"lat\": " + lat + "," +
"\"lng\": " + lng +
"}," +
"\"accuracy\":50.0," +
"\"name\": \"" + nameAdd + "\"," +
"\"types\": [\"" + typeAdd + "\"]," +
"\"language\": \"en\" " +
"}";
StringEntity se = new StringEntity(postBody, HTTP.UTF_8);
post.setEntity(se);
ResponseHandler<String> responseHandler=new BasicResponseHandler();
String responseBody = new DefaultHttpClient().execute(post, responseHandler);
JSONObject response = new JSONObject (responseBody);
Log.v(LOG_KEY, "Request URL= " + PLACE_ADD_URL);
return response;
} catch (HttpResponseException e) {
Log.v(LOG_KEY, e.getMessage());
throw e;
}
catch (IOException e) {
// TODO: handle exception
throw e;
}
}
publicJSONObject addPlace()引发异常{
试一试{
Log.v(Log_键,“添加位置…”);
String nameAdd=“NAME”;//输入地名
字符串typeAdd=“TYPE”;//输入地点类型
双纬度=00.0000;//输入地点纬度
双lng=-00.00000;//输入地点经度
HttpPost=newhttppost(PLACE\u ADD\u URL);
字符串正文=
"{"+
“\”位置\“:{”+
“\'lat\”:“+lat+”,”+
“\“lng\”:“+lng+
"}," +
“准确度”:50.0+
“\”名称\“:\”+名称添加+“\”,”+
“\”类型\:[\”“+类型添加+“\”],”+
““语言”:“en”+
"}";
StringEntity se=新的StringEntity(postBody,HTTP.UTF_8);
邮政实体(se);
ResponseHandler ResponseHandler=新BasicResponseHandler();
String responseBody=new DefaultHttpClient().execute(post,responseHandler);
JSONObject response=新的JSONObject(ResponseBy);
Log.v(Log_键,“Request URL=“+PLACE_ADD_URL”);
返回响应;
}捕获(HttpResponseException e){
Log.v(Log_键,e.getMessage());
投掷e;
}
捕获(IOE异常){
//TODO:处理异常
投掷e;
}
}
你是否在android仿真器中运行了这个程序,并找到了类似fiddler的HTTP代理,看看你通过网络发送了什么?没有,我是直接从三星Galaxy Nexus运行的。我希望有人会有一个关于如何在你的应用程序中添加位置的教程或东西。作为替代,请尝试在HTTP代理中查看请求,看看是否可以手动调整请求以使其正常工作。