Google지도 활동이 Google Maps Geocoding API V3 인 주소를 검색합니다.
가끔씩 여러 번 검색을 반복하더라도 데이터 연결로 연결할 때 Google지도의 응답은 OVER_QUERY_LIMIT입니다.
앱을 기기에 설치 한 후 처음으로 검색 할 때도 발생합니다.
내가 Wi-Fi에 연결되어 있으면 완벽하게 작동합니다.
내 코드는 다음과 같습니다.
검색 방법 :Google지도 지오 코딩 API V3는 Wi-Fi로 검색하지만 OVER_QUERY_LIMIT는 데이터 연결로 응답합니다.
public static JSONObject getAddressInfo(String sAddress) {
HttpGet httpGet = new HttpGet("http://maps.google.com/maps/api/geocode/json?address=" + sAddress + "®ion=it&language=it&sensor=false");
HttpClient client = new DefaultHttpClient();
HttpResponse response;
StringBuilder stringBuilder = new StringBuilder();
try {
response = client.execute(httpGet);
HttpEntity entity = response.getEntity();
InputStream stream = entity.getContent();
int b;
while ((b = stream.read()) != -1) {
stringBuilder.append((char) b);
}
} catch (ClientProtocolException e) {
} catch (IOException e) {
}
JSONObject jsonObject = new JSONObject();
try {
jsonObject = new JSONObject(stringBuilder.toString());
Log.d("Google Geocoding Response", stringBuilder.toString());
} catch (JSONException e) {
e.printStackTrace();
}
return jsonObject;
}
응답 관리 : 최대, 나는이 OVER_QUERY_LIMIT을받을 경우 구글마다 200 밀리 다시 쿼리 :
JSONObject jsonObject = Utils.getAddressInfo(Utils.strToUrl(inputName.getText().toString().trim()));
try {
String sStatus = jsonObject.getString("status");
if (sStatus.equals("OK")) {
lng = ((JSONArray)jsonObject.get("results")).getJSONObject(0).getJSONObject("geometry").getJSONObject("location").getDouble("lng");
lat = ((JSONArray)jsonObject.get("results")).getJSONObject(0).getJSONObject("geometry").getJSONObject("location").getDouble("lat");
bdlData.putDouble("lat", lat);
bdlData.putDouble("lng", lng);
bdlData.putFloat("dZoom", dZoom);
message.setData(bdlData);
mapHandler.sendMessage(message);
} else if (sStatus.equals("ZERO_RESULTS")) {
runMsgOnUIThread("Nessun risultato trovato.");
} else if (sStatus.equals("OVER_QUERY_LIMIT")) {
runMsgOnUIThread("Impossibile effettuare la ricerca al momento. Riprovare fra qualche secondo.");
} else if (sStatus.equals("REQUEST_DENIED")) {
runMsgOnUIThread("Richiesta non accettata. Riprovare.");
} else if (sStatus.equals("INVALID_REQUEST")) {
runMsgOnUIThread("Indirizzo non esistente.");
} else if (sStatus.equals("UNKNOWN_ERROR")) {
runMsgOnUIThread("Impossibile effettuare la ricerca al momento. Riprovare.");
}
} catch (JSONException e) {
e.printStackTrace();
}
지원해 주셔서 감사합니다. 이상한 점은 같은 연결을 통해 다음과 같이 생각할 수 있습니다. a) Google지도 앱이 완벽하게 작동합니다. b) Android Geocoder 클래스가 완벽하게 작동합니다 (다른 문제로 인해 실제로 사용하지 않음). 이제 어떻게해야합니까? – UmbySlipKnot
Google지도 앱은 Google 클라이언트 ID를 가장 많이 사용하므로 앱에 제한이 없습니다. 지오 코더 클래스가 제대로 작동하면 해당 클라이언트 ID도 사용하거나 요청을보다 효율적으로 조절하고 캐싱합니다. – aBrav
나는 이해한다. 그럼이 문제에 대해 내가 무엇을 권하고 싶니? 누군가가 Geocoder 클래스를 사용하지 말라고 말했습니다. http://stackoverflow.com/a/16656050/1769013 – UmbySlipKnot