'perms.get(Manifest.permission.ACCESS_FINE_LOCATION)' 的拆箱可能会产生 'NullPointerException'
Unboxing of 'perms.get(Manifest.permission.ACCESS_FINE_LOCATION)' may produce 'NullPointerException'
我在将我的项目更新到最新的 30(buildToolsVersion“30.0.2”)后看到了这个警告。
如何解决此警告?
onRequestPermissionsResult代码如下::
switch (requestCode) {
case LOCATION_PERMISSION_REQUEST_CODE: {
Map<String, Integer> perms = new HashMap<>();
perms.put(Manifest.permission.ACCESS_FINE_LOCATION, PackageManager.PERMISSION_GRANTED);
// Fill with actual results from user
if (grantResults.length > 0) {
for (int i = 0; i < permissions.length; i++)
perms.put(permissions[i], grantResults[i]);
if ((perms.get(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)
) {
// do some task
} else {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION)) {
showDialogOK(getResources().getString(R.string.some_req_permissions));
} else {
explain(getResources().getString(R.string.open_settings));
}
}
}
}
break;
default:
break;
}
根据自动装箱和拆箱的 official docs,将包装器类型 (Integer) 的对象转换为其相应的原始 (int) 值称为拆箱。当您尝试拆箱可能为 null 的值时,会显示可能的 NullPointerException 警告。
要消除此警告,使用 getInt()
而不是 get()
应该会有所帮助。您也可以对值添加空检查。
根据编辑中提供的代码,使用 ActivityCompat.checkSelfPermission()
而不是尝试从 params
HashMap 中获取 Manifest.permission.ACCESS_FINE_LOCATION
的可能空值。如果需要,请使用以下代码片段:
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
// do some task
} else {
...
}
我在将我的项目更新到最新的 30(buildToolsVersion“30.0.2”)后看到了这个警告。 如何解决此警告?
onRequestPermissionsResult代码如下::
switch (requestCode) {
case LOCATION_PERMISSION_REQUEST_CODE: {
Map<String, Integer> perms = new HashMap<>();
perms.put(Manifest.permission.ACCESS_FINE_LOCATION, PackageManager.PERMISSION_GRANTED);
// Fill with actual results from user
if (grantResults.length > 0) {
for (int i = 0; i < permissions.length; i++)
perms.put(permissions[i], grantResults[i]);
if ((perms.get(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)
) {
// do some task
} else {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION)) {
showDialogOK(getResources().getString(R.string.some_req_permissions));
} else {
explain(getResources().getString(R.string.open_settings));
}
}
}
}
break;
default:
break;
}
根据自动装箱和拆箱的 official docs,将包装器类型 (Integer) 的对象转换为其相应的原始 (int) 值称为拆箱。当您尝试拆箱可能为 null 的值时,会显示可能的 NullPointerException 警告。
要消除此警告,使用 getInt()
而不是 get()
应该会有所帮助。您也可以对值添加空检查。
根据编辑中提供的代码,使用 ActivityCompat.checkSelfPermission()
而不是尝试从 params
HashMap 中获取 Manifest.permission.ACCESS_FINE_LOCATION
的可能空值。如果需要,请使用以下代码片段:
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
// do some task
} else {
...
}