使用android.content.Context.checkPermission检查权限时出现空指针异常

Asy*_*nc- 4 java android android-context android-permissions

在查询Android日历以查找事件之前,我需要检查权限.要做到这一点,Android工作室警告我需要在查询之前进行检查.自动生成的代码就是这个:

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

尝试运行它时,我收到此错误:

尝试
在空对象引用上调用虚方法'int android.content.Context.checkPermission(java.lang.String,int,int)'

所以很明显,此时某些东西是空的,我试图以不同的方式获取应用程序的上下文,但它仍然是相同的错误.我试过的其他事情是这个代码,它应该处理低于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);
    }
Run Code Online (Sandbox Code Playgroud)

仍然得到同样的错误,任何人都可以帮助我吗?

Com*_*are 16

它是一个单独的类,控制器:公共类DummyData扩展Activity {....}

那不行.

Activity除非是真实活动,否则永远不要延长,您将在清单中注册.

永远不要创建一个Activityvia构造函数的实例(例如,new DummyData()你在代码中的某个地方).使用startActivity()以显示您在清单已注册的活动.

就目前而言,虽然您的DummyData类可能从编译的角度来看,但它在运行时不起作用.一个Activity需要由框架被实例化,而不是与你的情况DummyData.

真实 Context对象checkSelfPermission()传递给,并将真实 Activity对象传递给requestPermissions().在这种情况下,"真实"意味着"从框架中交给您".