8

当前,我的代码遇到问题,在过去 3 天里,我无法使用 Google Places API 成功完成删除请求,此处记录。

直到周日,只要请求的位置满足 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;
}
4

6 回答 6

18

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

于 2013-03-16T17:57:21.577 回答
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();
  }
于 2012-03-22T04:43:07.377 回答
0

我假设您已将 API_KEY_HERE 替换为您的 API 密钥。尝试在开发者控制台中获取新密钥,并确保您的“允许的 IP 地址”设置正确。

于 2012-03-20T19:42:38.200 回答
0

发生在我身上的另一种情况是,我存储 Google 参考 ID 的数据类型是 a string(限制为 255 个字符),将列数据类型更改为text固定所有内容。INVALID_REQUEST 响应通常来自错误的引用调用。Google 还可以延长参考 ID 的长度,您不会知道它没有正确保存到数据库中。

于 2013-01-10T14:06:56.810 回答
0

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

建议定期更新 Places 的存储参考。

于 2012-03-20T23:50:20.787 回答
0

我做错的是我使用了谷歌的“id”属性,但事实证明还有一个“place_id”,你必须使用place_id,而不是“id”。

于 2018-03-30T17:46:15.713 回答