Skip to content
This repository has been archived by the owner on Aug 8, 2023. It is now read-only.

ConcurrentModificationException when listening to location updates #4731

Closed
tobrun opened this issue Apr 18, 2016 · 7 comments
Closed

ConcurrentModificationException when listening to location updates #4731

tobrun opened this issue Apr 18, 2016 · 7 comments
Labels
Android Mapbox Maps SDK for Android crash

Comments

@tobrun
Copy link
Member

tobrun commented Apr 18, 2016

Steps to trigger behavior

  1. Open an activity listening to location changes with LocationServices.
  2. App crashes instantly

Expected behavior

Not crashing :trollface:

Actual behavior

Crashing with:

04 - 18 14: 27: 12.786 6652 - 6652 / com.mapbox.mapboxsdk.testapp E / AndroidRuntime: FATAL EXCEPTION: main
Process: com.mapbox.mapboxsdk.testapp, PID: 6652
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.next(ArrayList.java: 831)
at com.mapbox.mapboxsdk.location.LocationServices.onLocationChanged(LocationServices.java: 130)
at com.mapzen.android.lost.internal.FusedLocationProviderApiImpl.reportLocation(FusedLocationProviderApiImpl.java: 96)
at com.mapzen.android.lost.internal.FusionEngine.onLocationChanged(FusionEngine.java: 137)
at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java: 291)
at android.location.LocationManager$ListenerTransport. - wrap0(LocationManager.java)
at android.location.LocationManager$ListenerTransport$1.handleMessage(LocationManager.java: 236)
at android.os.Handler.dispatchMessage(Handler.java: 102)
at android.os.Looper.loop(Looper.java: 148)
at android.app.ActivityThread.main(ActivityThread.java: 6066)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java: 770)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 660)

Setup code:

    LocationServices locationServices = LocationServices.getLocationServices(this);
        locationServices.addLocationListener(this);
        locationServices.toggleGPS(true);

Callback code:

  @Override
    public void onLocationChanged(Location location) {
        if (location != null) {
            if (mMapView == null) {
                findViewById(R.id.progress).setVisibility(View.GONE);

                MapboxMapOptions mapboxMapOptions = new MapboxMapOptions();
                mapboxMapOptions.accessToken(getString(R.string.mapbox_access_token));
                mapboxMapOptions.styleUrl(Style.MAPBOX_STREETS);
                mapboxMapOptions.locationEnabled(true);
                mapboxMapOptions.camera(new CameraPosition.Builder()
                        .target(new LatLng(location))
                        .zoom(11)
                        .tilt(25)
                        .build());

                mMapView = new MapView(this, mapboxMapOptions);
                ((ViewGroup) findViewById(R.id.container)).addView(mMapView);

                mMapView.onCreate(savedState);
                mMapView.getMapAsync(this);
                mMapView.onResume();
                mLocation = location;
            }
        }
    }
@tobrun tobrun added Android Mapbox Maps SDK for Android crash labels Apr 18, 2016
@tobrun tobrun added this to the android-v4.1.0 milestone Apr 18, 2016
@tobrun
Copy link
Member Author

tobrun commented Apr 18, 2016

Rerunning the code without any changes is not producing the same exception..

@bleege
Copy link
Contributor

bleege commented Apr 27, 2016

Is this still happening after the fix in #4829 ?

@bleege
Copy link
Contributor

bleege commented May 6, 2016

Bump. Can we close this @tobrun?

@tobrun tobrun closed this as completed May 8, 2016
@bleege
Copy link
Contributor

bleege commented May 8, 2016

Thanks @tobrun!

@snkashis
Copy link
Contributor

I'm encountering a similar error - can this be reopened?How related are they, given the change in version from 4.1.0?Happens on multiple OS versions.

Libraries

    implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:5.3.1@aar'
    implementation 'com.mapbox.mapboxsdk:mapbox-android-services:2.2.9'
    implementation 'com.mapbox.mapboxsdk:mapbox-android-telemetry:2.2.9'
    implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-locationlayer:0.2.0'
    implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-building:0.1.0'

Setup code

        LocationEngineProvider locationEngineProvider = new LocationEngineProvider(this);

        locationEngine = locationEngineProvider.obtainBestLocationEngineAvailable();
        locationEngine.setPriority(HIGH_ACCURACY);
        locationEngine.activate();

Stacktrace

Fatal Exception: java.util.ConcurrentModificationException
       at java.util.HashMap$HashIterator.nextEntry(HashMap.java:851)
       at java.util.HashMap$ValueIterator.next(HashMap.java:879)
       at com.mapzen.android.lost.internal.FusedLocationProviderServiceDelegate.e(FusedLocationProviderServiceDelegate.java:93)
       at com.mapzen.android.lost.internal.FusionEngine.onLocationChanged(FusionEngine.java:191)
       at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:297)
       at android.location.LocationManager$ListenerTransport.-wrap0(LocationManager.java)
       at android.location.LocationManager$ListenerTransport$2.handleMessage(LocationManager.java:249)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:154)
       at android.app.ActivityThread.main(ActivityThread.java:6776)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)

@ndraiman
Copy link

I'm seeing a similar issue using Mapbox sdk v5.2.1 and Lost engine v3.0.2:

Stacktrace:

Fatal Exception: java.util.ConcurrentModificationException
       at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)
       at com.mapzen.android.lost.internal.FusionEngine.enable(FusionEngine.java:80)
       at com.mapzen.android.lost.internal.LocationEngine.addRequest(LocationEngine.java:47)
       at com.mapzen.android.lost.internal.FusedLocationProviderServiceDelegate.requestLocationUpdates(FusedLocationProviderServiceDelegate.java:65)
       at com.mapzen.android.lost.internal.FusedLocationProviderService$1.requestLocationUpdates(FusedLocationProviderService.java:43)
       at com.mapzen.android.lost.internal.FusedLocationProviderApiImpl.requestLocationUpdatesInternal(FusedLocationProviderApiImpl.java:195)
       at com.mapzen.android.lost.internal.FusedLocationProviderApiImpl.requestLocationUpdates(FusedLocationProviderApiImpl.java:162)
       at com.mapbox.services.android.telemetry.location.LostLocationEngine.requestLocationUpdates(LostLocationEngine.java:135)
       at com.mapbox.services.android.telemetry.MapboxTelemetry.onConnected(MapboxTelemetry.java:492)
       at com.mapbox.services.android.telemetry.location.LostLocationEngine.onConnected(LostLocationEngine.java:78)
       at com.mapzen.android.lost.internal.FusedLocationServiceConnectionManager.onServiceConnected(FusedLocationServiceConnectionManager.java:86)
       at com.mapzen.android.lost.internal.FusedLocationProviderApiImpl.onServiceConnected(FusedLocationProviderApiImpl.java:96)
       at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1105)
       at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1122)
       at android.os.Handler.handleCallback(Handler.java:733)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:146)
       at android.app.ActivityThread.main(ActivityThread.java:5756)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:515)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
       at dalvik.system.NativeStart.main(NativeStart.java)

@tobrun
Copy link
Member Author

tobrun commented Mar 1, 2018

@nexxado with #10354 we made location provider optional and you are able to use alternative providers as google play services or the default android one. The linked stacktrace above indicates an internal issue within the LOST location provider. Thank you for reporting this issue but please update our SDK to a more recent version (5.5.0) and provide an alternative location provider.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Android Mapbox Maps SDK for Android crash
Projects
None yet
Development

No branches or pull requests

4 participants