2012-03-20 70 views
7

当前我遇到了我的代码问题,在过去的3天里,我无法使用Google Places API成功完成删除请求,文档为hereGoogle Places API问题 - INVALID REQUEST

直到星期日为止,只要请求的地方符合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; 
} 
+0

我刚刚遇到了JSON请求的问题,因为文档中的place ID键应该是“place_id”而不是“placeid”。在此处查看我的答案:http://stackoverflow.com/a/28287549/4448436 – 2015-02-02 22:03:10

+0

placeid适用于Google API文档示例链接。但它不适用于我获得的ID。我为两者使用相同的API密钥。 – Talha 2017-06-13 07:37:52

回答

0

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

+3

错误的API密钥给出REQUEST_DENIED,而不是INVALID_REQUEST。 – djunod 2013-07-15 12:06:48

0

请尝试刷新您参考所推荐的文档: https://developers.google.com/maps/documentation/places/

建议对地方存储引用定期更新 。

+0

在我当前的测试中,我使用从创建请求传回的引用创建地点后运行此删除方法。 Google会很快改变他们的引用吗? – forsterb01 2012-03-21 08:11:30

+0

同一地点的参考文献永远不会相同,但应始终指向相同的地方。由于Places API仍处于开发和实验阶段,因此建议更新存储的引用以避免API更改时出现任何问题。你描述的方法应该正常工作,参考文献不应该很快改变。 – 2012-03-22 04:40:43

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

另一种情况,发生在我身上,就是我对我在那里存放了谷歌参考ID数据类型是string(限255个字符),将列数据类型更改为text修复了一切。 INVALID_REQUEST响应通常来自不良参考调用。 Google可能也会延长参考ID的长度,并且您不知道它没有正确保存到数据库。

15

就个人而言,我收到了INVALID_REQUEST对我的Google API请求的回复,因为他们之间的距离不够。我不得不在他们之间插入睡眠2秒,以便他们工作。

+0

你是一个救世主。我一直在试图调试错误2天。 – Anirudh 2017-11-05 12:02:20