Google Places API问题 - 无效请求

时间:2012-03-20 08:59:54

标签: java google-places-api

目前我的代码遇到问题,在过去3天内,我无法使用Google Places API成功完成删除请求,记录为here

直到周日,只要请求的地方满足API中的条件,此代码就会执行并运行而不会出现问题,而我收到的唯一响应是OK或REQUEST_DENIED表单。

然而,现在,每当我发送请求时,我收到的唯一响应都是INVALID_REQUEST形式,这至少可以说是非常不方便的。根据我的理解,以及我之前对此代码执行的测试,我遵守他们要求的格式,所以我无法理解为什么这不起作用。

其他人可以查看此代码并告诉我与链接API相比是否存在任何问题?

public boolean delete(String reference)
{
    try
    {
        System.out.println(reference);
        String url = "https://maps.googleapis.com/maps/api/place/delete/xml?sensor=false&key=API_KEY_HERE";

        String data = "<PlaceDeleteRequest>\n<reference>" + reference + "</reference>\n</PlaceDeleteRequest>";
        System.out.println(data);

        URL xmlUrl = new URL(url);
        HttpPost request = new HttpPost(xmlUrl.toURI());
        request.setEntity(new StringEntity(data));

        HttpClient client = new DefaultHttpClient();
        HttpResponse response = client.execute(request);
        HttpEntity entity = response.getEntity();

        BufferedReader input = new BufferedReader(new InputStreamReader(entity.getContent()));

        String line = "";

        while ((line = input.readLine()) != null) 
        {
            System.out.println(line);
            if (line.contains("<status>"))
            {
                String[] s1 = line.split(">");
                String[] s2 = s1[1].split("<");
                if (s2[0].equalsIgnoreCase("ok"))
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }

        input.close();

    }
    catch(Exception e)
    {
        return false;
    }
    return false;
}

6 个答案:

答案 0 :(得分:15)

个人而言,我收到了对我的Google API请求的INVALID_REQUEST响应,因为它们之间的间隔不够。我不得不在它们之间插入睡眠2秒钟才能使它们工作。

答案 1 :(得分:0)

我假设您已使用API​​密钥替换了API_KEY_HERE。尝试在developer console中获取新密钥,并确保您的“允许的IP地址”设置正确无误。

答案 2 :(得分:0)

尝试按照文档的建议刷新您的参考: https://developers.google.com/maps/documentation/places/

  

建议定期存储地方的参考资料   更新。

答案 3 :(得分:0)

这对我有用:

public String delete(String reference) {
  HttpClient httpclient = new DefaultHttpClient();
  HttpPost httppost = new HttpPost("https://maps.googleapis.com/maps/api/place/delete/xml?sensor=false&key=YOUR_KEY_HERE");
  try {
      StringEntity se = new StringEntity( "<PlaceDeleteRequest>\n<reference>" + reference + "</reference>\n</PlaceDeleteRequest>", HTTP.UTF_8);
      se.setContentType("text/xml");
      httppost.setEntity(se);
      HttpResponse httpresponse = httpclient.execute(httppost);
      HttpEntity resEntity = httpresponse.getEntity();
      return(EntityUtils.toString(resEntity));
  } catch (IOException e) {
      return e.toString();
  }

答案 4 :(得分:0)

发生在我身上的另一种情况是,我存储Google参考ID的我的数据类型是string(限制为255个字符),将列数据类型更改为text修复一切。 INVALID_REQUEST响应通常来自错误的引用调用。谷歌也可以扩展参考ID的长度,你不会知道它没有正确保存到数据库。

答案 5 :(得分:0)

我错误的是我使用的是Google的'id'属性,但事实证明还有'place_id',你必须使用place_id,而不是'id'。< / p>