Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Plugin.Geolocator.GeolocationContinuousListener.OnLocationChanged - Object reference not set to an instance of an object #306

Open
igorgomeslima opened this issue Jul 5, 2019 · 5 comments

Comments

@igorgomeslima
Copy link

igorgomeslima commented Jul 5, 2019

Version Number of Plugin: \packages\Xam.Plugin.Geolocator.4.5.0.6\lib\monoandroid71\Plugin.Geolocator.dll
Device Tested On: Android
Version of VS: VS2017 15.9.13
Version of Xamarin: 4.12.3.83
Xamarin Android SDK: 12.4.0.64
Versions of other things you are using: Mock Locations (fake GPS path)(https://play.google.com/store/apps/details?id=ru.gavrikov.mocklocations&hl=pt_BR)

Steps to reproduce the Behavior

Default configuration: https://jamesmontemagno.github.io/GeolocatorPlugin/

Expected Behavior

Position Changed event called.

Actual Behavior

This happens after a certain amount of time (this is intermittent).

Thread started: #44
Thread started: #45
Thread started: #46
Thread started: #47
07-05 14:37:21.686 D/Mono (12018): DllImport attempting to load: '/system/lib/liblog.so'.
07-05 14:37:21.693 D/Mono (12018): DllImport loaded library '/system/lib/liblog.so'.
07-05 14:37:21.693 D/Mono (12018): DllImport searching in: '/system/lib/liblog.so' ('/system/lib/liblog.so').
07-05 14:37:21.693 D/Mono (12018): Searching for '__android_log_print'.
07-05 14:37:21.694 D/Mono (12018): Probing '__android_log_print'.
07-05 14:37:21.694 D/Mono (12018): Found as '__android_log_print'.
Thread started: #48
Thread started: #49
Thread started: #50
Thread started: #51
Thread started: #52
Thread started: #53
Thread started: #54
07-05 14:37:21.791 I/MonoDroid(12018): UNHANDLED EXCEPTION:
07-05 14:37:21.806 I/MonoDroid(12018): System.NullReferenceException: Object reference not set to an instance of an object.
07-05 14:37:21.806 I/MonoDroid(12018): at Plugin.Geolocator.GeolocationContinuousListener.OnLocationChanged (Android.Locations.Location location) [0x0007e] in :0
07-05 14:37:21.806 I/MonoDroid(12018): at Android.Locations.ILocationListenerInvoker.n_OnLocationChanged_Landroid_location_Location
(System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_location) [0x00011] in _
:0
07-05 14:37:21.806 I/MonoDroid(12018): at (wrapper dynamic-method) System.Object.27(intptr,intptr,intptr)
Unhandled Exception:

System.NullReferenceException: Object reference not set to an instance of an object.

Thread finished: #54
The thread 0x36 has exited with code 0 (0x0).
Thread finished: #52
The thread 0x34 has exited with code 0 (0x0).
Thread finished: #51
The thread 0x33 has exited with code 0 (0x0).
Thread finished: #47
The thread 0x2f has exited with code 0 (0x0).
Thread finished: #46
The thread 0x2e has exited with code 0 (0x0).
Thread finished: #48
The thread 0x30 has exited with code 0 (0x0).
Thread finished: #50
The thread 0x32 has exited with code 0 (0x0).
Thread finished: #53
The thread 0x35 has exited with code 0 (0x0).
Thread finished: #44
The thread 0x2c has exited with code 0 (0x0).
Thread finished: #45
The thread 0x2d has exited with code 0 (0x0).
07-05 14:38:43.014 E/mono-rt (12018): [ERROR] FATAL UNHANDLED EXCEPTION: System.NullReferenceException: Object reference not set to an instance of an object.
07-05 14:38:43.014 E/mono-rt (12018): at (wrapper dynamic-method) System.Object.27(intptr,intptr,intptr)
07-05 14:38:43.014 E/mono-rt (12018): at (wrapper native-to-managed) System.Object.27(intptr,intptr,intptr)
Thread started: #55
Thread started: #56
Debugger Connection Lost: Debugger lost connection to the running application. Likely this means the application terminated unexpectedly.

Code snippet

async Task StartListeningPositionChangedAsync()
{
    try
    {
        if (CrossGeolocator.Current.IsListening)
            return;

        await CrossGeolocator.Current.StartListeningAsync(TimeSpan.FromSeconds(2),10, true);

        CrossGeolocator.Current.PositionChanged += PositionChanged;
        CrossGeolocator.Current.PositionError += PositionError;
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

private void PositionChanged(object sender, PositionEventArgs e)
{
    try
    {
        if (e.Position != null)
        {
            ...
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}
@harry-gordon
Copy link

I'm also experiencing this on Android, so far only on the Samsung S9. For context we listen for location updates throughout most of the app but sometimes we experience this same crash:

GeolocationContinuousListener.OnLocationChanged (Android.Locations.Location location)
ILocationListenerInvoker.n_OnLocationChanged_Landroid_location_Location_ (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_location)

@igorgomeslima did you ever find a work-around for this? It's a really serious issue for us on Android.

@igorgomeslima
Copy link
Author

igorgomeslima commented Jul 26, 2019

@harry-gordon We not find any work-around about this. This really is very serious. In this case, we stopped using the plugin. Now we using Fused Location Provider.

Sample here.

@chrisfoulds
Copy link

chrisfoulds commented Jul 26, 2019

I've just done a 5hr soak test using lockito as my fake gps provider and have encountered zero issues, yesterday I ran the app live for 2hr 45mins with no issues either.

Code is :

 void CrossGeolocator_Current_PositionChanged(object sender, PositionEventArgs e)
        {
            var position = e.Position;
            if (lastRecievedPosition != null)
            {
                if(e.Position.Latitude==lastRecievedPosition.Latitude && e.Position.Longitude == lastRecievedPosition.Longitude && e.Position.Timestamp == lastRecievedPosition.Timestamp)
                {
                    // Reject it we got a double fire !!!
                    return;
                }
                else
                {
                    lastRecievedPosition = new StorePosition(e.Position);
                }
            }
            else
            {
                lastRecievedPosition = new StorePosition(e.Position);
            }
..... etc. etc.
}

@chrisfoulds
Copy link

and


if (CrossGeolocator.Current.IsListening)
            {
                return;
            }

            lastRecievedPosition = null;
            lastSentPosition = null;
            CrossGeolocator.Current.PositionChanged += CrossGeolocator_Current_PositionChanged;
            CrossGeolocator.Current.PositionError += CrossGeolocator_Current_PositionError;
            

            // was 1,1
            if (await CrossGeolocator.Current.StartListeningAsync(TimeSpan.FromSeconds(1), 1,
                true, new ListenerSettings
                {
                    ActivityType = ActivityType.Fitness,
                    AllowBackgroundUpdates = true,
                    DeferLocationUpdates = false,
                    DeferralDistanceMeters = 500,
                    DeferralTime = TimeSpan.FromSeconds(60 * 5),
                    ListenForSignificantChanges = false,
                    PauseLocationUpdatesAutomatically = false,
                }))
            {
                tracking = true;
            }
            else
            {
                tracking = false;
            }

@harry-gordon
Copy link

Hey @chrisfoulds, thanks for sharing. To put the issue in perspective we've been using the plugin for weeks and have only encountered the issue on one device and only with mock data.

Will continue to gather data and consider submitting a fix 🕵.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants