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
eddie skywalker 16 Мар 2011 в 13:24
Попробуйте проверить значение getMyLocation ()
 – 
Aswan
16 Мар 2011 в 13:39
Как? Я думаю, что ноутбук не может занять любое место из-за проблемы с GPS.
 – 
eddie skywalker
16 Мар 2011 в 14:35
С тост-сообщением я принял "нулевое" значение в мобильном телефоне.
 – 
eddie skywalker
16 Мар 2011 в 14:54
В этом нет смысла. Почему вы обнуляете MyLocationOverlay? Ясно, что он никогда не может быть нулевым, когда вы проверяете его, поскольку вы его создали, поэтому он никогда не может быть нулевым там.
 – 
Octavian Damiean
16 Мар 2011 в 17:55
Я действительно не знаю, хотите ли вы, я могу отправить свой проект. Я просто хочу узнать свое местоположение и попытаться отцентрировать экран.
 – 
eddie skywalker
16 Мар 2011 в 18:20

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();
}
16
pcans 16 Мар 2011 в 18:25

Похоже, вы не передаете координаты в 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));
1
apesa 16 Мар 2011 в 14:04
Да, ваш способ работает, но предположим, что я где-то еще, что я не знаю точных координат, поэтому мне нужно использовать методы location.getLatitude () или myLocOverlay.getMyLocation (). GetLatitudeE6 (), но эти методы выдают ошибку
 – 
eddie skywalker
16 Мар 2011 в 14:33
У вас должны быть некоторые средства определения вашего географического местоположения, как при использовании местоположения GPS на устройстве Android.
 – 
apesa
16 Мар 2011 в 16:26
Ваш нулевой указатель вызван отсутствием данных геоточки. MyLocationOverlay реализует android.hardware.SensorListener и android.location.LocationListener. Так что где-то вам нужно будет получить ваше геокодированное местоположение с вашего устройства. Я использую наложения, но мои данные о географических точках поступают из базы данных. Однако я знаю, что LocationListener должен работать на вас. Прочтите эту stackoverflow. ru / questions / 1801866 /…
 – 
apesa
16 Мар 2011 в 17:13
Я добавил свой метод assignFirstLoc. Как вы понимаете, я назначил геоточке определенные данные. Затем метод onCreate снова компилируется. У меня есть значение географической точки, и я думаю, что myLocOverlay не равно нулю, но я добавил всплывающее сообщение к моему методу initMyLocation, и он возвращает «null»: S
 – 
eddie skywalker
16 Мар 2011 в 17:37