Ответ 1
Геокодер не всегда возвращает значение. Вы можете попробовать отправить запрос 3 раза в цикл for. Я должен был бы вернуться хотя бы один раз. Если нет, то это может быть проблема подключения или могут быть другие проблемы, такие как сервер, не отвечающий на ваш запрос. Попробуйте посмотреть эти темы:
Геокодер не всегда возвращает значение и geocoder.getFromLocationName возвращает только null
Обновлено:
У меня был цикл while, но я использовал его максимум 10 раз. Иногда он никогда ничего не возвращал, даже если он был подключен к интернету. Затем я использовал этот более надежный способ получить адрес каждый раз:
public JSONObject getLocationInfo() {
HttpGet httpGet = new HttpGet("http://maps.google.com/maps/api/geocode/json?latlng="+lat+","+lng+"&sensor=true");
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());
} catch (JSONException e) {
e.printStackTrace();
}
return jsonObject;
}
Я назвал его следующим:
JSONObject ret = getLocationInfo();
JSONObject location;
String location_string;
try {
location = ret.getJSONArray("results").getJSONObject(0);
location_string = location.getString("formatted_address");
Log.d("test", "formattted address:" + location_string);
} catch (JSONException e1) {
e1.printStackTrace();
}
Надеюсь, это поможет. Я тоже устал полагаться на геокодер. Это сработало для меня. Если вы замените URL координатами lat и longitude и увидите возвращаемый объект JSON в веб-браузере. Вы увидите, что только что произошло.