Проблема с draw () в MapView ItemizedOverlay

1

Я разрабатываю приложение для парижского метрополитена. Одна из функций - это карта, на которой вы можете щелкнуть по станциям метро и посмотреть, что такое линии метро, ​​и когда следующие 4 поезда на этой станции.

Таким образом, я создал классы MapActivity и ItemizedOverlay.

На моем устройстве он работает отлично, но я получаю несколько журналов от пользователей с крахом, и я действительно не понимаю, что неправильно.

Моя активность в карте добавляет ONE ItemizedOverlay, которая отображает синюю точку для текущего местоположения пользователя. Этот оверлей также прослушивает onTap, который в зависимости от координат крана будет пытаться найти станции метро (для которых я знаю координаты lat/lon). Это работает отлично.

Трассировка стека аварии:

java.lang.NullPointerException
at com.google.android.maps.OverlayBundle.draw(OverlayBundle.java:42)
at com.google.android.maps.MapView.onDraw(MapView.java:494)
at android.view.View.draw(View.java:6535)
at android.view.ViewGroup.drawChild(ViewGroup.java:1531)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
at android.view.ViewGroup.drawChild(ViewGroup.java:1529)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
at android.view.View.draw(View.java:6538)
at android.widget.FrameLayout.draw(FrameLayout.java:352)
at android.view.ViewGroup.drawChild(ViewGroup.java:1531)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
at android.view.View.draw(View.java:6538)
at android.widget.FrameLayout.draw(FrameLayout.java:352)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1830)
at android.view.ViewRoot.draw(ViewRoot.java:1349)
at android.view.ViewRoot.performTraversals(ViewRoot.java:1114)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4363)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)

Иногда это происходит из разных строк, но всегда заканчивается сбой при OverlayBunde.java:42

Как не упоминается мой код, я не знаю, что случилось.

Вы можете получить исходный код MapActivity и ItemizedOverlay: http://code.google.com/p/metroparis/source/browse/trunk/src/org/bicou/metro/

Класс активности ACarteStations, а класс наложения StationMetroMapOverlay.

Мне жаль, что код на французском языке. Я переведу его в конце концов:) Если вам нужны переводы об именах переменных, просто дайте мне знать.

Надеюсь, ты поможешь мне.

  • 0
    Я также хочу дать список устройств, которые дают сбой, не знаю, насколько это актуально: - HTC Desire 2.2 FRF91 - HTC HD2 2.2 FRF91 - Sony Ericsson X10i 1.6 - Acer Liquid 2.1 - Samsung GT-I5700 2.1 - Nexus One 2.1 EPE54B - Samsung GT-I9000 2.1 Мое устройство (на котором у меня нет этой проблемы) - это Nexus One 2.2 FRF91 (CyanogenMod6RC2)
Теги:
google-maps

1 ответ

1
Лучший ответ

Я предполагаю, что следующая строка (# 106) в ajouterOverlayPosition() является причиной вашей ошибки:

if (l == null) {
        return null;
}

Одна вещь, которая может случиться, заключается в том, что устройству не удается найти ваше местоположение (в lm.getLastKnownLocation(...), строка # 73). В этом случае вы возвращаете значение null и добавляете этот null к mapOverlays at onCreate(). onDraw() пытается нарисовать все наложения, включая этот нулевой оверлей, и генерируется исключение NullPointerException.

Вероятно, вы должны относиться к проблеме с нулевым местоположением по-разному (возможно, покажите журнал ошибок или повторите попытку или используйте какое-то местоположение по умолчанию...).

  • 0
    Большое спасибо amitlicht! Вот и все! Умная догадка. Извините, что так долго отвечал, у меня были проблемы с интернетом. Еще раз спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню