2

我正在使用文本搜索 Google Places API 为 Android 开发一个应用程序。目标是提供地址并获取纬度和经度,以便我可以在地图上标记它。为此,我向 Google Places 发送以下请求:

https://maps.googleapis.com/maps/api/place/textsearch/json?query=46+Rue+Emile+Raspail+Arcueil&sensor=true&key=MY_API_KEY

使用此代码:

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 密钥(不是服务器或浏览器),但它不应该是一个问题,因为一个密钥适用于整个应用程序。

我没有办法解决这个请求问题,所以我希望有人能帮助我。

提前致谢。

4

0 回答 0