在查询Android日历以查找事件之前,我需要检查权限。 要做到这一点,Android工作室警告我需要在查询之前进行检查。 自动生成的代码是这一部分:
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);
}
仍然得到同样的错误,有人可以帮我吗?
答案 0 :(得分:15)
它是一个单独的类,控制器:公共类DummyData扩展了Activity {....}
这不会起作用。
从不延长Activity
,除非它是真实的活动,您将在清单中注册。
从不通过构造函数(例如,代码中某处的Activity
)创建new DummyData()
的实例。使用startActivity()
显示您在清单中注册的活动。
就目前而言,虽然您的DummyData
类可能从编译的角度来看,但它在运行时不起作用。 Activity
需要由框架实例化,而DummyData
则不是这样。
将真实的 Context
对象传递给checkSelfPermission()
,并将真实的 Activity
对象传递给requestPermissions()
。在这种情况下,“真实”意味着“从框架中交给您”。
答案 1 :(得分:1)
使用(活动)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);
}
答案 2 :(得分:0)
你必须在“这个”位置写下正确的活动 活动中的主要问题。
尝试在MainActivity中编写代码并进行测试。
let termList = [];
const termsRef = firebase.database().ref('vocab/');
termsRef.on('child_added', snap => termList.push(snap.val().term));