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