使用 android.content.Context.checkPermission 检查权限时出现空指针异常
Null pointer exception when checking for permission with android.content.Context.checkPermission
我需要在查询 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
所以很明显此时有些东西是空的,我尝试用不同的方式获取应用程序的上下文,但它仍然是同样的错误。
我尝试的另一件事是这段代码,它应该处理低于 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,您将在清单中注册它。
从不 通过构造函数创建 Activity
的实例(例如,代码中某处的 new DummyData()
)。使用 startActivity()
显示您在清单中注册的 activity。
就目前而言,虽然您的 DummyData
class 从编译的角度来看可能有效,但它在运行时不起作用。 Activity
需要由框架实例化,而您的 DummyData
.
不是这种情况
传递一个realContext
对象给checkSelfPermission()
,传递一个realActivity
反对 requestPermissions()
。在这种情况下,"real" 表示 "handed to you from the framework".
你必须在"this"的位置写上正确的activity
activity 中的主要问题。
尝试在MainActivity中编写代码并测试。
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);
}
使用 (Activity)mContext 而不是这个。
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);
}
我需要在查询 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
所以很明显此时有些东西是空的,我尝试用不同的方式获取应用程序的上下文,但它仍然是同样的错误。 我尝试的另一件事是这段代码,它应该处理低于 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,您将在清单中注册它。
从不 通过构造函数创建 Activity
的实例(例如,代码中某处的 new DummyData()
)。使用 startActivity()
显示您在清单中注册的 activity。
就目前而言,虽然您的 DummyData
class 从编译的角度来看可能有效,但它在运行时不起作用。 Activity
需要由框架实例化,而您的 DummyData
.
传递一个realContext
对象给checkSelfPermission()
,传递一个realActivity
反对 requestPermissions()
。在这种情况下,"real" 表示 "handed to you from the framework".
你必须在"this"的位置写上正确的activity activity 中的主要问题。
尝试在MainActivity中编写代码并测试。
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);
}
使用 (Activity)mContext 而不是这个。
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);
}