当前位置: 首页 > 面试题库 >

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

漆雕亮
2023-03-14
问题内容

在查询Android日历中的事件之前,我需要检查权限。为此,Android studio警告我在查询之前需要先进行检查。自动生成的代码如下:

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

尝试运行它时,出现以下错误:

尝试
在空对象引用上调用虚拟方法’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);
    }

仍然出现相同的错误,有人可以帮助我吗?


问题答案:

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

那是行不通的。

*Activity 除非是一项真正的活动,否则请 *不要 扩展,这是您将在清单中注册的活动。

永远不要Activity通过构造函数创建一个实例(例如,new DummyData()您在代码中的某处)。使用startActivity()显示一个活动,您在清单已注册。

就目前而言,虽然您的DummyData类可以从编译的角度工作,但它在运行时将无法工作。一个Activity需要由框架被实例化,而不是与你的情况DummyData

实物 传递ContextcheckSelfPermission(),然后将 实物
传递ActivityrequestPermissions()。在这种情况下,“真实”是指“从框架交给您”。



 类似资料:
  • DescriptionServer遇到了一个内部错误(),它无法满足此请求。 例外 jasperException:java.lang.NullPointerException根本原因 NullPointerException

  • > 单击 受保护得空onPrepareDialog(int id,Dialog Dialog) 受保护的对话框onCreateDialog(int id) 如果我对timepickerdialog代码做了什么错误,请告诉我。

  • 我有一个com。谷歌。云存储Blob对象。我可以在java代码中下载和上传这个对象,但我想在启动进程之前检查一下是否存在某些东西。简而言之,这里是我的代码中给我带来问题的部分。 Eclipse似乎无法在IDE中捕获它。示例似乎也遵循此布局。有人知道发生了什么事吗? 我正在Linux环境机器上运行。(它在云功能方面也失败了)。我正在使用Java 11运行时。

  • 问题内容: MyClass.java: 编译MyClass.java文件的SimpleCompileTest.java的清单。 SimpleCompileTest.java: 我正在执行SimpleCompileTest类并获取NullPointerException。ToolProvider.getSystemJavaCompiler()返回null。有人可以告诉我代码有什么问题吗 问题答案:

  • 以下是在sun.reflect.nativeMethodAccessorImpl.Invoke0(本机方法)在sun.reflect.nativeMethodAccessorImpl.Invoke(未知源)在sun.reflect.NativeMethodAccessorImpl.Invoke(未知源)在java.lang.Reflect.Method.Invoke(未知源)在com.codena

  • 我试图用Powermock和Mockito编写一个JUnit测试用例。我正在从测试用例下面调用一个方法。此方法从method1调用,而该方法调用Method2。我已经添加了@runwith和@preparefortest注释。 //这是我的测试类: 错误跟踪: