0

When I call the method CheckSelfPermission(permission) I get exception Java.Lang.NullPointerException (Attempt to invoke virtual method 'int android.content.Context.checkSelfPermission(java.lang.String)' on a null object reference). Why? Please help me

    public void GetLocationPermission()
    {
        string permission = Manifest.Permission.AccessFineLocation;

        if (CheckSelfPermission(permission) == (int)Permission.Granted)
        {               
            GetLocation();
            return;
        }

        RequestPermissions(PermissionsLocation, RequestLocationId);
    }

    readonly string[] PermissionsLocation =
    {
        Manifest.Permission.AccessCoarseLocation,
        Manifest.Permission.AccessFineLocation
    };

    const int RequestLocationId = 0;
Viktor Bylbas
  • 677
  • 1
  • 9
  • 25
  • 2
    What type of Activity are you using? AppCompatActivity? – SushiHangover Sep 14 '17 at 13:49
  • Try `if (PackageManager.CheckPermission(Manifest.Permission.AccessFineLocation, PackageName) == Permission.Granted` and make sure the Android version you are using allows for checking permission – Nick Peppers Sep 14 '17 at 14:08
  • Maybe you can check [this](https://stackoverflow.com/questions/37322645/nullpointerexception-when-trying-to-check-permissions). – Grace Feng Sep 15 '17 at 02:33

1 Answers1

1

In my experience a NullPointerException in that situation stems from the Activity not being correctly setup.

Make sure you extend Activity and add the attribute as so:

[Activity(Label = "MyClass")]
class MyClass: Activity`

Additionally, requesting permissions is made significantly easier when using Xamarin.Essentials 1.4.0.

What you would do now:

[Activity(Label = "MyClass")]
class MyClass: Activity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        Platform.Init(this, savedInstanceState);
    }

    public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Android.Content.PM.Permission[] grantResults)
    {
        Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

        base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    }

    public async Task<PermissionStatus> CheckAndRequestLocationPermission()
    {
        var status = await Permissions.CheckStatusAsync<Permissions.LocationWhenInUse>();
        if (status != PermissionStatus.Granted)
        {
            status = await Permissions.RequestAsync<Permissions.LocationWhenInUse>();
        }

        // Additionally could prompt the user to turn on in settings

        return status;
    }
}

You also need to make sure that your MainActivity has the same override of OnRequestPermissionsResult, which it should have by default if you didn't create the project manually.

Further reading: Xamarin.Essentials: Permissions

dropbear
  • 1,510
  • 1
  • 12
  • 21