Hi,
I am trying to use the app MVG more (for bike and car sharing in Munich) and it is mostly working fine. However when I scroll around the map too fast/excessively I get an exception.
The exception actually occurs in the vtm library, so this report might not belong here, but I traced the immediate cause back to a call from gms.
This is what logcat shows me:
D/GmsMapMarkerImpl(29927): New marker m241 with title null @ lat/lng: (48.13603973388672,11.542187690734863)
D/BitmapDescriptor(29927): Start loading org.microg.gms.maps.bitmap.ResourceBitmapDescriptor@1363194e
D/BitmapDescriptor(29927): Done loading org.microg.gms.maps.bitmap.ResourceBitmapDescriptor@1363194e
D/BitmapDescriptor(29927): Start loading org.microg.gms.maps.bitmap.ResourceBitmapDescriptor@f738e8b
D/BitmapDescriptor(29927): Done loading org.microg.gms.maps.bitmap.ResourceBitmapDescriptor@f738e8b
D/BitmapDescriptor(29927): Start loading org.microg.gms.maps.bitmap.ResourceBitmapDescriptor@20a8867
E/AndroidRuntime(29927): FATAL EXCEPTION: Thread-5242
E/AndroidRuntime(29927): Process: de.mvg.more, PID: 29927
E/AndroidRuntime(29927): java.lang.NullPointerException: Attempt to invoke virtual method 'org.oscim.core.GeoPoint org.oscim.layers.marker.MarkerItem.getPoint()' on a null object reference
E/AndroidRuntime(29927): at org.oscim.layers.marker.MarkerRenderer.populate(MarkerRenderer.java:182)
E/AndroidRuntime(29927): at org.oscim.layers.marker.MarkerLayer.populate(MarkerLayer.java:66)
E/AndroidRuntime(29927): at org.oscim.layers.marker.ItemizedLayer.addItem(ItemizedLayer.java:75)
E/AndroidRuntime(29927): at org.microg.gms.maps.BackendMap.update(BackendMap.java:175)
E/AndroidRuntime(29927): at org.microg.gms.maps.GoogleMapImpl.update(GoogleMapImpl.java:310)
E/AndroidRuntime(29927): at org.microg.gms.maps.markup.MarkerImpl$1.run(MarkerImpl.java:249)
E/AndroidRuntime(29927): at org.microg.gms.maps.bitmap.BitmapDescriptorImpl$1.run(BitmapDescriptorImpl.java:84)
E/AndroidRuntime(29927): at java.lang.Thread.run(Thread.java:818)
W/ActivityManager( 594): Force finishing activity 1 de.mvg.more/de.swm.mvgrad.activities.MainActivity
W/DropBoxManagerService( 594): Dropping: data_app_crash (877 > 0 bytes)
D/GmsLocManagerSvcImpl( 1491): updateLocationRequest: LocationRequestUpdateData{opCode=2, request=null, listener=com.google.android.gms.location.ILocationListener$Stub$Proxy@28934f5f, pendingIntent=null, callback=null}
D/GmsLocProviderReal( 1491): gps: removeRequest LocationRequestHelper{locationRequest=LocationRequest{priority=100, interval=1500, fastestInterval=250, explicitFastestInterval=false, expirationTime=9223372036854775807, numUpdates=2147483647, smallestDesplacement=0.0, maxWaitTime=0}, hasFinePermission=true, hasCoarsePermission=true, packageName='null', lastReport=null}
The problem seems to lie with the following lines in play-services-core/src/main/java/org/microg/gms/maps/BackendMap.java:171
public synchronized void update(Markup markup) {
if (markup == null) return;
if (markup instanceof MarkerItemMarkup) {
mapView.items().removeItem(mapView.items().getByUid(markup.getId()));
mapView.items().addItem(((MarkerItemMarkup) markup).getMarkerItem(context));
} else if (markup instanceof DrawableMarkup) {
updateDrawableLayer();
mapView.drawables().update();
}
redraw();
}
The getMarkerItem-method returns null, which eventually leads to an exception. In my search for the reason I added some output to MakerImpl.getMarkerItem and MarkerImpl.remove. The log now shows this:
D/BitmapDescriptor(31974): Done loading org.microg.gms.maps.bitmap.ResourceBitmapDescriptor@25211c91
D/BitmapDescriptor(31974): Start loading org.microg.gms.maps.bitmap.ResourceBitmapDescriptor@2f6207f7
D/BitmapDescriptor(31974): Done loading org.microg.gms.maps.bitmap.ResourceBitmapDescriptor@2f6207f7
D/BitmapDescriptor(31974): Start loading org.microg.gms.maps.bitmap.ResourceBitmapDescriptor@23b14c01
D/BitmapDescriptor(31974): Start loading org.microg.gms.maps.bitmap.ResourceBitmapDescriptor@16bdaa6
D/BitmapDescriptor(31974): Done loading org.microg.gms.maps.bitmap.ResourceBitmapDescriptor@23b14c01
D/BitmapDescriptor(31974): Done loading org.microg.gms.maps.bitmap.ResourceBitmapDescriptor@16bdaa6
D/GmsMapMarkerImpl(31974): Removing m855
D/GmsMapMarkerImpl(31974): java.lang.Exception
D/GmsMapMarkerImpl(31974): at org.microg.gms.maps.markup.MarkerImpl.remove(MarkerImpl.java:60)
D/GmsMapMarkerImpl(31974): at com.google.android.gms.maps.model.internal.IMarkerDelegate$Stub.onTransact(IMarkerDelegate.java:48)
D/GmsMapMarkerImpl(31974): at android.os.Binder.transact(Binder.java:380)
D/GmsMapMarkerImpl(31974): at com.google.android.gms.maps.model.internal.g.a(Unknown Source)
D/GmsMapMarkerImpl(31974): at com.google.android.gms.maps.model.Marker.a(Unknown Source)
D/GmsMapMarkerImpl(31974): at de.swm.mvgrad.fragments.MapFragment.insertOrUpdateMarkers(MapFragment.java:852)
D/GmsMapMarkerImpl(31974): at de.swm.mvgrad.fragments.MapFragment.showMarkers(MapFragment.java:585)
D/GmsMapMarkerImpl(31974): at de.swm.mvgrad.presenters.MapPresenter.createMarkersAndNotifyView(MapPresenter.java:314)
D/GmsMapMarkerImpl(31974): at de.swm.mvgrad.presenters.MapPresenter.access$300(MapPresenter.java:42)
D/GmsMapMarkerImpl(31974): at de.swm.mvgrad.presenters.MapPresenter$9.onNext(MapPresenter.java:269)
D/GmsMapMarkerImpl(31974): at de.swm.mvgrad.presenters.MapPresenter$9.onNext(MapPresenter.java:264)
D/GmsMapMarkerImpl(31974): at rx.observers.SafeSubscriber.onNext(SafeSubscriber.java:130)
D/GmsMapMarkerImpl(31974): at rx.internal.operators.bc.c(OperatorObserveOn.java:208)
D/GmsMapMarkerImpl(31974): at rx.internal.operators.bc$2.call(OperatorObserveOn.java:170)
D/GmsMapMarkerImpl(31974): at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
D/GmsMapMarkerImpl(31974): at android.os.Handler.handleCallback(Handler.java:739)
D/GmsMapMarkerImpl(31974): at android.os.Handler.dispatchMessage(Handler.java:95)
D/GmsMapMarkerImpl(31974): at android.os.Looper.loop(Looper.java:135)
D/GmsMapMarkerImpl(31974): at android.app.ActivityThread.main(ActivityThread.java:5292)
D/GmsMapMarkerImpl(31974): at java.lang.reflect.Method.invoke(Native Method)
D/GmsMapMarkerImpl(31974): at java.lang.reflect.Method.invoke(Method.java:372)
D/GmsMapMarkerImpl(31974): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
D/GmsMapMarkerImpl(31974): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
D/BitmapDescriptor(31974): Start loading org.microg.gms.maps.bitmap.ResourceBitmapDescriptor@5d4ba5c
D/BitmapDescriptor(31974): Start loading org.microg.gms.maps.bitmap.ResourceBitmapDescriptor@166fde3a
D/BitmapDescriptor(31974): Start loading org.microg.gms.maps.bitmap.ResourceBitmapDescriptor@28212048
D/BitmapDescriptor(31974): Done loading org.microg.gms.maps.bitmap.ResourceBitmapDescriptor@166fde3a
D/BitmapDescriptor(31974): Done loading org.microg.gms.maps.bitmap.ResourceBitmapDescriptor@28212048
I/GmsMapMarkerImpl(31974): Returning removed item m855
E/AndroidRuntime(31974): FATAL EXCEPTION: Thread-16814
E/AndroidRuntime(31974): Process: de.mvg.more, PID: 31974
E/AndroidRuntime(31974): java.lang.NullPointerException: Attempt to invoke virtual method 'org.oscim.core.GeoPoint org.oscim.layers.marker.MarkerItem.getPoint()' on a null object reference
E/AndroidRuntime(31974): at org.oscim.layers.marker.MarkerRenderer.populate(MarkerRenderer.java:182)
E/AndroidRuntime(31974): at org.oscim.layers.marker.MarkerLayer.populate(MarkerLayer.java:66)
E/AndroidRuntime(31974): at org.oscim.layers.marker.ItemizedLayer.addItem(ItemizedLayer.java:75)
E/AndroidRuntime(31974): at org.microg.gms.maps.BackendMap.update(BackendMap.java:175)
E/AndroidRuntime(31974): at org.microg.gms.maps.GoogleMapImpl.update(GoogleMapImpl.java:310)
E/AndroidRuntime(31974): at org.microg.gms.maps.markup.MarkerImpl$1.run(MarkerImpl.java:253)
E/AndroidRuntime(31974): at org.microg.gms.maps.bitmap.BitmapDescriptorImpl$1.run(BitmapDescriptorImpl.java:84)
E/AndroidRuntime(31974): at java.lang.Thread.run(Thread.java:818)
W/ActivityManager( 594): Force finishing activity 1 de.mvg.more/de.swm.mvgrad.activities.MainActivity
W/DropBoxManagerService( 594): Dropping: data_app_crash (877 > 0 bytes)
D/GmsLocManagerSvcImpl(31618): updateLocationRequest: LocationRequestUpdateData{opCode=2, request=null, listener=com.google.android.gms.location.ILocationListener$Stub$Proxy@1246606c, pendingIntent=null, callback=null}
So it seems that the item is first removed and then added to the map. Since I know nothing about the maps API, there might be a more basic problem then adding a null item, but checking for that solved the problem for me:
diff --git a/play-services-core/src/main/java/org/microg/gms/maps/BackendMap.java b/play-services-core/src/main/java/org/microg/gms/maps/BackendMap.java
index cd9c555..dab8dcf 100644
--- a/play-services-core/src/main/java/org/microg/gms/maps/BackendMap.java
+++ b/play-services-core/src/main/java/org/microg/gms/maps/BackendMap.java
@@ -172,7 +172,9 @@ public class BackendMap implements ItemizedLayer.OnItemGestureListener<MarkerIte
if (markup == null) return;
if (markup instanceof MarkerItemMarkup) {
mapView.items().removeItem(mapView.items().getByUid(markup.getId()));
- mapView.items().addItem(((MarkerItemMarkup) markup).getMarkerItem(context));
+ MarkerItem itm = ((MarkerItemMarkup) markup).getMarkerItem(context);
+ if (itm == null) return;
+ mapView.items().addItem(itm);
} else if (markup instanceof DrawableMarkup) {
updateDrawableLayer();
mapView.drawables().update();
I hope this helps to fix the issue. If anyone thinks that it should be handled more robustly on the vtm side, I will also add a bugreport there.
Hi, I am trying to use the app MVG more (for bike and car sharing in Munich) and it is mostly working fine. However when I scroll around the map too fast/excessively I get an exception.
The exception actually occurs in the vtm library, so this report might not belong here, but I traced the immediate cause back to a call from gms.
This is what logcat shows me:
The problem seems to lie with the following lines in play-services-core/src/main/java/org/microg/gms/maps/BackendMap.java:171
The getMarkerItem-method returns null, which eventually leads to an exception. In my search for the reason I added some output to MakerImpl.getMarkerItem and MarkerImpl.remove. The log now shows this:
So it seems that the item is first removed and then added to the map. Since I know nothing about the maps API, there might be a more basic problem then adding a null item, but checking for that solved the problem for me:
I hope this helps to fix the issue. If anyone thinks that it should be handled more robustly on the vtm side, I will also add a bugreport there.