我正在使用文本搜索 Google Places API 为 Android 开发一个应用程序。目标是提供地址并获取纬度和经度,以便我可以在地图上标记它。为此,我向 Google Places 发送以下请求:
使用此代码:
public class GeoLocRDV {
private LatLng pos;
private static final String API_KEY = " xxxxx_MY_KEY ";
private static final String PLACES_TEXT_SEARCH_URL = "https://maps.googleapis.com/maps/api/place/textsearch/json?";
public GeoLocRDV(String rdvPlace){
String url;
try {
url = PLACES_TEXT_SEARCH_URL+"query=" + URLEncoder.encode(rdvPlace,"UTF-8") + "&sensor=true&key=" + API_KEY;
Log.e("DEBUG HTTP", url);
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response;
response = httpclient.execute(new HttpGet(url));
StatusLine statusLine = response.getStatusLine();
if(statusLine.getStatusCode() == HttpStatus.SC_OK){
ByteArrayOutputStream out = new ByteArrayOutputStream();
response.getEntity().writeTo(out);
out.close();
String responseString = out.toString();
Log.e("DEBUG RESP", responseString);
JSONObject jsonObj = new JSONObject(responseString);
JSONArray results = (JSONArray) jsonObj.get("results");
Log.e("DEBUG JSON", results.toString());
double rdvLat = (Double) results.getJSONObject(0).getJSONObject("geometry").getJSONObject("location").get("lat");
Log.e("DEBUG JSON lat", Float.toString((float) rdvLat));
double rdvLng = (Double) results.getJSONObject(0).getJSONObject("geometry").getJSONObject("location").get("lng");
Log.e("DEBUG JSON lng", Float.toString((float) rdvLng));
this.pos = new LatLng(rdvLat, rdvLng);
Log.e("DEBUG GEO", pos.toString());
}else{
response.getEntity().getContent().close();
}
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
}
不幸的是,我得到了这个回复:
{
"html_attributions" : [],
"results" : [],
"status" : "REQUEST_DENIED"
}
我尝试过了 :
- 将“sensor”参数切换为“true”和“false”
- 将 https 更改为 http
- 验证我的密钥是否正确复制/粘贴并与清单中的密钥相对应
- 我还转到了 api 控制台,然后转到 SERVICES,单击 Active services 选项卡并验证“Places API”已打开。点击了?和“试试看!” 旁边的链接。它还返回了相同的 JSON (REQUEST_DENIED)
我在 StackOverflow 上阅读了我可以尝试将端口地址更改为 443 以从 Places API 获得响应,但我不知道该怎么做。
最后,我指定我在获得我的 API KEY 后激活了 Google Places 服务(因为我也在使用 Maps API)并且它是一个 Android 密钥(不是服务器或浏览器),但它不应该是一个问题,因为一个密钥适用于整个应用程序。
我没有办法解决这个请求问题,所以我希望有人能帮助我。
提前致谢。