Android 运行时检查权限时出现活动上下文空指针错误
我试图确保在闹钟应用程序第一次运行时,该应用程序能够读取较新设备的外部存储 我一直在获取上下文的空指针错误。在这一行:Android 运行时检查权限时出现活动上下文空指针错误,android,nullpointerexception,android-permissions,android-context,Android,Nullpointerexception,Android Permissions,Android Context,我试图确保在闹钟应用程序第一次运行时,该应用程序能够读取较新设备的外部存储 我一直在获取上下文的空指针错误。在这一行: if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) 我得到了这个错误: Caused by: java.lang.NullPointerException: Attempt
if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
我得到了这个错误:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.Context.checkPermission(java.lang.String, int, int)' on a null object reference
我尝试了(活动)上下文、getParent()、this.context、getApplicationContext,正如您在下面看到的,只是上下文。他们都有相同的结果
提前感谢你的帮助
这是全部代码:
public class MainActivity extends AppCompatActivity implements FragmentAddAlarms.onTabChangedListener {
public static final int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 123;
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
boolean result = checkPermission();
if (result) {
//writeCalendarEvent();
}
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public boolean checkPermission()
{
int currentAPIVersion = Build.VERSION.SDK_INT;
if(currentAPIVersion>=android.os.Build.VERSION_CODES.M)
{
if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, Manifest.permission.READ_EXTERNAL_STORAGE)) {
AlertDialog.Builder alertBuilder = new AlertDialog.Builder(context);
alertBuilder.setCancelable(true);
alertBuilder.setTitle("Permission necessary");
alertBuilder.setMessage("External storage is necessary to for alarms!!!");
alertBuilder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public void onClick(DialogInterface dialog, int which) {
ActivityCompat.requestPermissions((Activity)context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
}
});
AlertDialog alert = alertBuilder.create();
alert.show();
} else {
ActivityCompat.requestPermissions((Activity)context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
}
return false;
} else {
return true;
}
} else {
return true;
}
}
您的变量
context
为null
且无用。只需使用this
(它指的是当前的AppCompatActivity
)或MainActivity。如果需要在内部类(例如AlertDialog
的onClick
方法)中引用它,则只需使用this
。您的变量上下文
为null
,没有任何用处。只需使用this
(它指的是当前的AppCompatActivity
)或MainActivity。如果需要在内部类(例如AlertDialog
的onClick
方法)中引用它,就可以使用此.如果您使用compat方法,则不需要使用currentAPIVersion>=android.os.Build.VERSION\u CODES.M
进行版本检查。main活动。此
是有效的,非空Context
如果使用compat方法,则不需要currentAPIVersion>=android.os.Build.VERSION\u CODES.M
,它们会为您执行版本检查。MainActivity。此
是一个有效的非空Context