2012-03-20 27 views
7

Hiện tại tôi đang gặp sự cố với mã của mình, trong 3 ngày qua, tôi không thể hoàn tất thành công yêu cầu xóa bằng API Google Địa điểm, được ghi lại here.Sự cố với API Google Địa điểm - YÊU CẦU THAM GIA

Cho đến Chủ nhật mã này sẽ chạy và chạy mà không có sự cố miễn là địa điểm được yêu cầu đáp ứng các điều kiện trong API và các câu trả lời duy nhất tôi nhận được là biểu mẫu OK hoặc REQUEST_DENIED.

Bây giờ, tuy nhiên, bất cứ khi nào tôi gửi yêu cầu, các câu trả lời duy nhất tôi nhận được có dạng INVALID_REQUEST, rất bất tiện khi nói ít nhất. Từ sự hiểu biết của tôi và thử nghiệm tôi đã thực hiện trên mã này trước đó, tôi tuân thủ định dạng mà họ đang yêu cầu, vì vậy tôi không thể hiểu tại sao điều này không hiệu quả.

Có ai khác có thể xem mã này và cho tôi biết liệu có bất kỳ sự cố nào so với API được liên kết không?

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

Tôi vừa gặp sự cố này với yêu cầu JSON vì khóa ID địa điểm trong tài liệu phải là "place_id" chứ không phải "placeid". Xem câu trả lời của tôi ở đây: http://stackoverflow.com/a/28287549/4448436 –

+0

placeid hoạt động tốt với liên kết mẫu của tài liệu Google API. Nhưng nó không hoạt động với id thu được của tôi. Tôi đang sử dụng cùng một Khóa API cho cả hai. – Talha

Trả lời

0

Tôi giả sử bạn đã thay thế API_KEY_HERE bằng khóa API của mình. Hãy thử lấy khóa mới trong số developer console và đảm bảo cài đặt "địa chỉ IP được phép" của bạn là chính xác.

+3

khóa API sai cho REQUEST_DENIED, không phải INVALID_REQUEST. – djunod

0

Hãy thử làm mới bạn tham khảo theo khuyến cáo của tài liệu: https://developers.google.com/maps/documentation/places/

Đó là khuyến cáo rằng tài liệu tham khảo được lưu trữ cho Places được thường xuyên cập nhật .

+0

Trong thử nghiệm hiện tại của tôi, tôi đang chạy phương pháp xóa này sau khi tạo một địa điểm, sử dụng tham chiếu được truyền lại từ yêu cầu tạo. Google có thay đổi tài liệu tham khảo của họ nhanh chóng không? – forsterb01

+0

Tài liệu tham khảo cho cùng một địa điểm sẽ không bao giờ giống nhau nhưng phải luôn luôn trỏ đến cùng một địa điểm. Vì API địa điểm vẫn đang được phát triển và thử nghiệm, nên cập nhật các tham chiếu được lưu trữ để tránh bất kỳ vấn đề nào nếu thay đổi API. Phương pháp bạn mô tả sẽ hoạt động chính xác, các tham chiếu sẽ không thay đổi nhanh chóng. –

0

này đã làm việc cho tôi:

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

Một kịch bản, đã xảy ra với tôi, đó là kiểu dữ liệu của tôi cho nơi tôi đã được lưu trữ ID tham khảo Google là một string (giới hạn 255 ký tự), thay đổi kiểu dữ liệu cột thành text cố định mọi thứ. Phản hồi INVALID_REQUEST thường từ cuộc gọi tham chiếu không hợp lệ. Google cũng có thể mở rộng độ dài của các ID tham chiếu và bạn sẽ không biết nó không được lưu chính xác cho DB.

15

Cá nhân, tôi đã nhận được phản hồi INVALID_REQUEST cho các yêu cầu Google API của mình vì chúng không đủ khoảng cách giữa nhau. Tôi phải chèn một giấc ngủ trong 2 giây để chúng hoạt động.

+0

Bạn là một vị cứu tinh. Tôi đã bị mắc kẹt trong 2 ngày cố gắng để gỡ lỗi. – Anirudh

Các vấn đề liên quan