空指针警告 - BatteryManager.EXTRA_LEVEL
Null Pointer Warning - 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;
}
该代码似乎有效并且从未让我失望,但我收到警告:
Method invocation 'batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)' may produce 'java.lang.NullPointerException'
这可能永远不会真正影响我的应用程序,但由于最终产品依赖于它,我想知道,我该如何解决这个潜在问题?
有没有办法把上面的重新组织起来达到同样的效果(获取电池当前的充电状态)?
我会在它周围抛出一个 try/catch 因为你知道它可能会抛出错误,然后你可以适当地处理它 if/when 它曾经发生过。
try {
//your code here
} catch (NullPointerException e) {
//handle the error here, maybe return -1?
}
registerReceiver
的 Javadoc 指出:
* @return The first sticky intent found that matches <var>filter</var>,
* or null if there are none.
因此 有可能 return 你将成为一个空事件。您已经处理了值无效 ((level == -1 || scale == -1)
) 的情况,因此我建议您只检查意图是否为空,并尽早 return 该值:
if (batteryIntent == null) {
return -1;
}
我正在尝试使用以下方法获取设备的当前电池电量:
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;
}
该代码似乎有效并且从未让我失望,但我收到警告:
Method invocation 'batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)' may produce 'java.lang.NullPointerException'
这可能永远不会真正影响我的应用程序,但由于最终产品依赖于它,我想知道,我该如何解决这个潜在问题? 有没有办法把上面的重新组织起来达到同样的效果(获取电池当前的充电状态)?
我会在它周围抛出一个 try/catch 因为你知道它可能会抛出错误,然后你可以适当地处理它 if/when 它曾经发生过。
try {
//your code here
} catch (NullPointerException e) {
//handle the error here, maybe return -1?
}
registerReceiver
的 Javadoc 指出:
* @return The first sticky intent found that matches <var>filter</var>,
* or null if there are none.
因此 有可能 return 你将成为一个空事件。您已经处理了值无效 ((level == -1 || scale == -1)
) 的情况,因此我建议您只检查意图是否为空,并尽早 return 该值:
if (batteryIntent == null) {
return -1;
}