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

标签 java android android-context android-permissions

在查询 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!!");
    }

当尝试运行它时,出现此错误:

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

所以很明显此时something是null,我尝试用不同的方式获取app的context,但还是一样的错误。 我尝试的另一件事是这段代码,它应该处理低于 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);
    }

仍然出现同样的错误,有人可以帮我解决这个问题吗?

最佳答案

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

那是行不通的。

永远不要扩展 Activity 除非它是一个真正的 Activity ,一个您将在 list 中注册的 Activity 。

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

就目前而言,虽然您的 DummyData 类从编译的角度来看可能有效,但它在运行时不起作用。 Activity 需要由框架实例化,而您的 DummyData 不是这种情况。

传递一个真实 Context 对象给checkSelfPermission(),并传递一个真实 Activity 对象到 requestPermissions()。在这种情况下,“真实”意味着“从框架交给你”。

关于java - 使用 android.content.Context.checkPermission 检查权限时出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35844879/

相关文章:

java - 启动 IntentService 的空指针异常

java - 带有 ContextThemeWrapper 的 LayoutInflater 并不总是主题化

java - 在多线程 RMI 架构中使用 JPA

java - Tomcat 8 正在运行但拒绝连接

java - Android 运行 doInBackground 后 AsyncTask 未完成

android - 无法使用适用于 Android 的 MSAL 1.0 获取 ID token (Azure AD)

android - Activity 上下文和应用程序上下文的区别

java - 将 jsp 文件合并/叠加到特定位置

java - 在 Java ME 中找不到 FileReader

Android Status Bar Notifications - 选择通知时打开正确的 Activity