private void initMyLocation() {
myLocOverlay = new MyLocationOverlay(this, myMap);
myLocOverlay.enableCompass();
myLocOverlay.enableMyLocation();
myMap.getOverlays().add(myLocOverlay);
if (myLocOverlay == null)
{
assignFirstLoc();
}
if (myLocOverlay != null)
{
Log.e("error","1");
p = new GeoPoint((int) (myLocOverlay.getMyLocation().getLatitudeE6()), (int) (myLocOverlay.getMyLocation().getLongitudeE6()));
mc = myMap.getController();
mc.animateTo(p);
mc.setCenter(p);
}
Я увидел сообщение «error 1» в logcat, но после этого я принял исключение с нулевым указателем. Я не знаю почему, я считаю, что проверяю, что myLocOverlay имеет значение null или нет с блоком «if». Есть какие-либо предложения?
Редактировать:
Это мой метод assignGFirstLoc, который присвоил первые значения:
private void assignFirstLoc()
{
final String coordinates[] = {"41.00527", "28.97696"};
double lat2 = Double.parseDouble(coordinates[0]);
double lng2 = Double.parseDouble(coordinates[1]);
p = new GeoPoint((int) (lat2 * 1E6), (int) (lng2 * 1E6));
myMap.getController().setZoom(16);
myMap.getController().animateTo(p);
myMap.getController().setCenter(p);
}
2 ответа
MyLocationOverlay
можно использовать только для отображения местоположения, поступающего от датчиков. Вы не можете его установить. У вас есть NullPointer, потому что MyLocationOverlay.getMyLocation()
возвращает null. Сенсоры еще не успели уловить геолокацию.
Если вы хотите показать местоположение, когда датчик получил данные, вы можете сделать это:
mMyLocationOverlay.runOnFirstFix(new Runnable() { public void run() {
mapView.getController().animateTo(mMyLocationOverlay.getMyLocation());
}});
Если вы хотите отобразить элемент в произвольном месте (со значениями широты и долготы), вам необходимо реализовать свою собственную версию ItemizedOverlay
Пример можно найти в документации SDK: руководство по просмотру карты Google, часть 2 AddingOverlayItem
Если вы просто хотите показать произвольное местоположение на карте, вам не нужно наложение. просто вызовите свою функцию, и она будет работать:
private void initMyLocation() {
assignFirstLoc();
}
Похоже, вы не передаете координаты в GeoPoint. Если это не где-то еще в вашем коде. Что-то вроде этого работает
String coordinates[] = {"41.146064", "-80.642861"};
double lat = Double.parseDouble(coordinates[0]);
double lng = Double.parseDouble(coordinates[1]);
p = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));
Похожие вопросы
Связанные вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.
MyLocationOverlay
? Ясно, что он никогда не может быть нулевым, когда вы проверяете его, поскольку вы его создали, поэтому он никогда не может быть нулевым там.