#android #runtime-permissions #unboxing
#Android #время выполнения-разрешения #распаковка
Вопрос:
Я вижу это предупреждение после обновления моего проекта до последней версии 30 (buildToolsVersion «30.0.2»). Как устранить это предупреждение?
onrequestpermissionsрезультат кода следующим образом ::
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;
}
Комментарии:
1. не могли бы вы предоставить разрешение на проверку, закрытое из вашего кода!
2. Добавлен код @El.MENSI
Ответ №1:
Преобразование объекта типа оболочки (Integer) в соответствующее примитивное (int) значение называется распаковкой, согласно официальным документам по автоматической упаковке и распаковке. При попытке распаковать значение, которое может быть нулевым, появляется это предупреждение о возможном исключении NullPointerException.
Чтобы избавиться от этого предупреждения, использование getInt()
вместо get()
должно помочь. Вы также можете добавить нулевую проверку значения.
Основываясь на предоставленном коде в правках, используйте ActivityCompat.checkSelfPermission()
вместо того, чтобы пытаться извлечь возможное нулевое значение Manifest.permission.ACCESS_FINE_LOCATION
из params
HashMap . При необходимости используйте следующий фрагмент кода:
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
// do some task
} else {
...
}
Комментарии:
1. getInt() не найден, также я добавил некоторый код из onRequestPermissionsResult
2. Я добавил рекомендуемый способ избежать этого предупреждения и выполнить ту же задачу во фрагменте кода после просмотра ваших правок @AndroidGuy