привет, ребята, у меня есть маркер в центре камеры с картой, и я хочу показать, где сейчас находится информация о маркере места, я пишу это пока, но он не работает, и вот ошибка
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
Toast.makeText(getContext(), "Map is Ready", Toast.LENGTH_SHORT).show();
getDeviceLocation();
mMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
Geocoder geocoder = new Geocoder(getContext(), Locale.getDefault());
try {
List<Address> addresses = geocoder.getFromLocation(cameraPosition.target.latitude,cameraPosition.target.longitude, 1);
Address obj = addresses.get(0);
String add = obj.getAddressLine(0);
Toast.makeText(getContext(), add, Toast.LENGTH_SHORT).show();
Log.e("IGA", "Address" + add);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
});
}
это ошибка, и она исходит из списка
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
Поскольку вы не опубликовали всю трассировку стека, я не могу точно знать, какой объект выбрасывает IndexOutOfBoundsException. Но этот пример кода должен указать вам правильное направление.
@Override
public void onCameraChange(CameraPosition cameraPosition) {
Geocoder geocoder = new Geocoder(getContext(), Locale.getDefault());
try {
List<Address> addresses = geocoder.getFromLocation(cameraPosition.target.latitude,cameraPosition.target.longitude, 1);
for(Address address : addresses){
if (address.getMaxAddressLineIndex() > -1){
String add = address.getAddressLine(0);
Toast.makeText(getContext(), add, Toast.LENGTH_SHORT).show();
Log.e("IGA", "Address" + add);
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
Я добавил цикл foreach для объекта addresses. Я вижу, что вы установили максимальный адрес 1 в свой метод getFromLocation(), но если вы измените его на большее число, этот код все равно должен работать для всех Addresses.
Я также проверил, действительно ли address имеет значение getAddressLine(0), проверив, что getMaxAddressLineIndex() больше -1. Это индекс не в счет. getMaxAddressLineIndex() вернет -1, если он пуст.
Большое спасибо, теперь он работает, у меня есть еще один вопрос, и это очень полезно, если вы можете мне помочь, могу ли я изменить язык этого местоположения? Я из Ирана, и я хочу, чтобы адреса этого местоположения были фарси
я вижу места на фарси в иранских приложениях
Нет, я не хочу вас беспокоить. Искал сам, но не нашел. Большое спасибо за помощь.
@razaAmini :: Я вижу, вы уже пробовали new Geocoder(getContext(), Locale.getDefault());, и я не думаю, что Geocoder geocoder = new Geocoder(getContext(), new Locale("fa","IR")); подойдет. Удачи в поиске нужного языкового стандарта.
Большое спасибо, я так новичок в программировании на Android, и я не могу так хорошо писать по-английски, и я не нашел никаких сайтов на местном языке, чтобы объяснить это, большое спасибо, чувак, извини за беспокойство
Большое спасибо за помощь, пожалуйста, подскажите, что мне еще опубликовать? потому что этот код тоже не работает, на этот раз нет сбоев, тостов или журналов