Null pointer exception when checking for permission with android.content.Context.checkPermission

半腔热情 提交于 2019-11-28 08:59:26

问题


I need to check for permissions before querying the Android calendar for events. To do it, Android studio is warning that I need to follow a check before querying. The auto generated code is this piece:

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CALENDAR) != PackageManager.PERMISSION_GRANTED) {
        System.out.println("NO ACCESS TO CALENDAR!! Abort mission, abort mission!!");
    }

When trying to run it, I get this error:

Attempt to invoke virtual method 'int
android.content.Context.checkPermission(java.lang.String, int, int)' on a null object reference

So it is clear that something is null at this point, and I tried to get the context of the app with a different way, but it's still the same error. Other thing I tried was this code, which is supposed to handle the targets lower than Android 6:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CALENDAR) != PackageManager.PERMISSION_GRANTED) {

        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CALENDAR},
                MY_PERMISSIONS_REQUEST_READ_CONTACTS);
    }

Still get the same error, can anybody help me with this?


回答1:


it's a separate class, controller: public class DummyData extends Activity { .... }

That is not going to work.

Never extend Activity unless it is a real activity, one that you will register in the manifest.

Never create an instance of an Activity via a constructor (e.g., the new DummyData() that you have somewhere in your code). Use startActivity() to display an activity that you have registered in the manifest.

As it stands, while your DummyData class may work from a compilation standpoint, it will not work at runtime. An Activity needs to be instantiated by the framework, and that is not the case with your DummyData.

Pass a real Context object to checkSelfPermission(), and pass a real Activity object to requestPermissions(). In this case, "real" means "handed to you from the framework".




回答2:


Use (Activity)mContext instead of this.

if(ContextCompat.checkSelfPermission((Activity)mContext,Manifest.permission.READ_CALENDAR)!=PackageManager.PERMISSION_GRANTED)    
        {
            ActivityCompat.requestPermissions((Activity) mContext, new String[]{Manifest.permission.READ_CALENDAR},
                    MY_PERMISSIONS_REQUEST_READ_CONTACTS);
        }



回答3:


You have to write the right activity at the position "this" main problem in activity.

Try to write the code in MainActivity and test.

   if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CALENDAR) != PackageManager.PERMISSION_GRANTED) {

    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CALENDAR},
            MY_PERMISSIONS_REQUEST_READ_CONTACTS);
}


来源:https://stackoverflow.com/questions/35844879/null-pointer-exception-when-checking-for-permission-with-android-content-context

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!