Android - 请求 GPS 权限 Context.getTheme()' 空对象引用
Android - asking for GPS permissions Context.getTheme()' null object reference
我在我的应用程序中使用位置信息,并且在第一次安装应用程序时要求用户允许在他们的设备上使用位置信息。
如果他们按确定(启用位置),一切正常。但如果他们拒绝,应用程序会因以下错误而崩溃:
Attempt to invoke virtual method 'android.content.res.Resources$Theme android.content.Context.getTheme()' on a null object reference
这是我与此错误相关的部分代码:
if (permissionsRejected.size() > 0) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (shouldShowRequestPermissionRationale(permissionsRejected.get(0))) {
showMessageOKCancel("These permissions are mandatory for the application. Please allow access.",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(permissionsRejected.toArray(
new String[permissionsRejected.size()]), ALL_PERMISSIONS_RESULT);
}
}
});
return;
}
}
}
还有:
private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
new AlertDialog.Builder(context)
.setMessage(message)
.setPositiveButton("OK", okListener)
.setNegativeButton("Cancel", null)
.create()
.show();
}
错误指向 showMessageOKCancel。
我认为上下文可能存在一些问题,我这里有:new AlertDialog.Builder(context)
所以我尝试添加:
private final Context mContext;
在 private void showMessageOKCancel 里面我放了
this.mContext = context;
最后 new AlertDialog.Builder(mContext)
但我仍然有同样的错误
如果你使用了 extends AppCompatActivity 然后只传递这个关键字它也可以工作并使用 Fragment 然后在警告对话框中传递 getActivity() 我在 mainactiviy extends Appcompatactivity 中测试下面的代码并且它工作没有收到任何错误。
private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
new AlertDialog.Builder(this) // if fragment pass getActivity()
.setMessage(message)
.setPositiveButton("OK", okListener)
.setNegativeButton("Cancel", null)
.create()
.show();
}
最后,这对我的情况有所帮助:
new AlertDialog.Builder(getActivity(), R.style.Theme_AppCompat_Dialog_Alert)
工作正常!
我在我的应用程序中使用位置信息,并且在第一次安装应用程序时要求用户允许在他们的设备上使用位置信息。
如果他们按确定(启用位置),一切正常。但如果他们拒绝,应用程序会因以下错误而崩溃:
Attempt to invoke virtual method 'android.content.res.Resources$Theme android.content.Context.getTheme()' on a null object reference
这是我与此错误相关的部分代码:
if (permissionsRejected.size() > 0) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (shouldShowRequestPermissionRationale(permissionsRejected.get(0))) {
showMessageOKCancel("These permissions are mandatory for the application. Please allow access.",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(permissionsRejected.toArray(
new String[permissionsRejected.size()]), ALL_PERMISSIONS_RESULT);
}
}
});
return;
}
}
}
还有:
private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
new AlertDialog.Builder(context)
.setMessage(message)
.setPositiveButton("OK", okListener)
.setNegativeButton("Cancel", null)
.create()
.show();
}
错误指向 showMessageOKCancel。
我认为上下文可能存在一些问题,我这里有:new AlertDialog.Builder(context)
所以我尝试添加:
private final Context mContext;
在 private void showMessageOKCancel 里面我放了
this.mContext = context;
最后 new AlertDialog.Builder(mContext)
但我仍然有同样的错误
如果你使用了 extends AppCompatActivity 然后只传递这个关键字它也可以工作并使用 Fragment 然后在警告对话框中传递 getActivity() 我在 mainactiviy extends Appcompatactivity 中测试下面的代码并且它工作没有收到任何错误。
private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
new AlertDialog.Builder(this) // if fragment pass getActivity()
.setMessage(message)
.setPositiveButton("OK", okListener)
.setNegativeButton("Cancel", null)
.create()
.show();
}
最后,这对我的情况有所帮助:
new AlertDialog.Builder(getActivity(), R.style.Theme_AppCompat_Dialog_Alert)
工作正常!