2012-03-20 87 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