问题描述
将项目更新到最新版本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()
而不是尝试从Manifest.permission.ACCESS_FINE_LOCATION
的HashMap中获取params
的可能的空值。如果需要,请使用以下代码段:
if (ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
// do some task
} else {
...
}