谷歌地点API问题 - 无效请求

9

目前我在处理代码时遇到了问题,在过去的三天中,我一直无法成功完成使用Google Places API进行删除请求,该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;
}

我刚刚遇到了JSON请求的问题,因为文档中的place ID键应该是“place_id”,而不是“placeid”。请参见我的答案:http://stackoverflow.com/a/28287549/4448436 - Mr. Kevin Thomas
placeid在Google API文档的示例链接中运行良好。但是它与我获得的ID不兼容。我正在为两者使用相同的API密钥。 - Talha
6个回答

20

个人经验是,我的Google API请求接收到INVALID_REQUEST响应,因为它们之间的间隔不够。我不得不在它们之间插入2秒的延迟才能使它们工作。


你是个救星。我已经被卡了两天,试图调试这个错误。 - Anirudh

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();
  }

0
我之前犯了一个错误,就是使用了 Google 的 'id' 属性,但事实证明还有一个 'place_id' 属性,你必须使用 place_id 而不是 'id'。

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

0

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


0

在我的当前测试中,我在创建一个地点后使用从创建请求返回的引用运行此删除方法。Google会那么快更改它们的引用吗? - forsterb01
同一地点的引用永远不会相同,但应始终指向同一位置。由于Places API仍处于开发和实验阶段,建议更新存储的引用以避免API更改可能带来的任何问题。您描述的方法应该可以正常工作,引用不应该那么快就发生变化。 - Chris Green

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接