Я пытаюсь получить текущий уровень заряда батареи устройства следующее:Null Pointer Предупреждение - BatteryManager.EXTRA_LEVEL
Intent batteryIntent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
int level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
Log.i(LOG_FILTER, "Battery level = " + (level*100)/scale);
// error check values
if (level == -1 || scale == -1) {
return -1;
} else {
return (level * 100)/scale;
}
код, кажется, работает и никогда не подводил меня, но я получает предупреждение :
вызов метода 'batteryIntent.getIntExtra (BatteryManager.EXTRA_LEVEL, -1)' может произвести 'java.lang.NullPointerException'
Это может никогда не повлиять на мое приложение, но поскольку в зависимости от этого есть конечный продукт, мне интересно, как я могу приспособить эту потенциальную проблему? Есть ли способ реорганизовать вышеупомянутое для достижения того же результата (получение текущего состояния заряда батареи)?
@ advdev1234 Просто чтобы прояснить, если вы идете в этом маршрут, который вы хотите проверить 'batteryIntent == null', прежде чем пытаться что-то вроде' batteryIntent.getIntExtra (...) ', потому что именно там будет ваш NPE. – WOUNDEDStevenJones
Я добавил проверку нулевого намерения перед запросом на дополнительные услуги, и предупреждение исчезло, спасибо за вашу помощь. @kcoppock Не могли бы вы сказать, что, поскольку намерение изменения состояния батареи часто срабатывает и является липким, единственный вероятный сценарий, который может вызвать нулевое намерение, заключается в том, что батарея как-то отсутствует? – advdev1234
@ advdev1234 Я не мог сказать точно; в любой момент, когда метод утверждает, что в некоторых случаях он может возвращать значение null, лучше всего его обрабатывать. – kcoppock