В последнее время у меня проблемы с кодом, который я использовал несколько лет назад. Это Java-код Android для получения города, штата и страны с помощью API Карт Google (обратный геокод). После отправки широты, долготы сервер Google должен вернуть Город. Но сервер возвращает ноль. Я выкладываю код и экран печати проблемы. Это происходит с бразильскими городами.
В некоторых странах такой проблемы нет.
Attempt_A [Город: Сан-Паулу (Население: 12 миллионов) / Штат: Сан-Паулу / Страна: Бразилия]
Результат: в поле CITY возвращено значение NULL
[Широта, Долгота]: [-23,590630, -46,660867]
Attempt_B [Город: Рио-де-Жанейро (Население: 6,5 миллиона человек) / Штат: Рио-де-Жанейро / Страна: Бразилия]
Результат: в поле CITY возвращено значение NULL
[Широта, Долгота]: [-22,972394, -43,185209]
Код ниже не работает для большинства городов Бразилии, которые я пытался проанализировать.
city = address.get (0) .getLocality (); // ПОЛУЧИТЬ ГОРОД
Во всех моих попытках поразить бразильские города поле города не имеет значения, PS1: у меня не было проблем в городах США и Европы. PS2: поле адреса, страна, штат и все остальное работает нормально
Я уже предпринял некоторые попытки (изменение ключа API, изменение версии API, определения Locale.ENGLISH, тестирование на эмуляторе и реальных устройствах), однако проблема остается.
//send latitude and longitude data to Google and get City,state and Country data
public void gcode(){
Log.e(TAG_DEBUG, " gcode function ");
Geocoder geocoder;
List<Address> addresses;
geocoder = new Geocoder(getApplicationContext(), Locale.ENGLISH);
try {
addresses = geocoder.getFromLocation(latToParse, longitToParse, 1); // Here 1 represent max location result to returned, by documents it recommended 1 to 5
city = addresses.get(0).getLocality(); // GET CITY
state = addresses.get(0).getAdminArea(); // GET STATE
country = addresses.get(0).getCountryName(); // GET COUNTRY
String postalCode = addresses.get(0).getPostalCode();
String knownName = addresses.get(0).getFeatureName(); // Only if available else return NULL
Log.e(TAG_DEBUG, "Country,State,City: " + country +" "+ state +" "+ city);
String address = addresses.get(0).getAddressLine(0); //GET Address
Log.e(TAG_DEBUG, "postalCode: " + postalCode);
Log.e(TAG_DEBUG, "knownName: " + knownName);
Log.e(TAG_DEBUG, "address: " + address);
if(country!=null){
countryStr=country;
countryStr=countryStr.toUpperCase();
Log.e(TAG_DEBUG, "CountryStr: "+countryStr);
}else{
countryStr="null";
}
if(state!=null){
stateStr=state;
stateStr=stateStr.toUpperCase();
Log.e(TAG_DEBUG, "StateStr: "+stateStr);
}else{
stateStr="null";
}
if(city!=null){
cityStr=city;
cityStr=cityStr.toUpperCase();
Log.e(TAG_DEBUG, "CityStr: "+cityStr);
}else{
cityStr="null";
Log.e(TAG_DEBUG, "CityStr: "+cityStr);
}
geocoderOk=true;
geocoderIntStr="1";
Log.e(TAG_DEBUG, " geocoderOk: " +geocoderOk);
//Display city,state,country data on editTexts
displayCityStateCountry();
}catch (Exception e){
e.printStackTrace();
Log.e(TAG_DEBUG, "IO" + e);
geocoderOk=false;
geocoderIntStr="2";
Log.e(TAG_DEBUG, " geocoderOk: " +geocoderOk);
etCity.setText("Geocoder did not worked!");
}
}
//Display city,state,country data on editTexts
public void displayCityStateCountry(){
etCity.setText(cityStr);
etState.setText(stateStr);
etCountry.setText(countryStr);
}
В коде должны отображаться страна, штат и город. Но поле города отображает ноль. Если вы попытаетесь получить адрес, все будет хорошо. Проблема возникает только с городскими данными по бразильским городам.