空指针警告 - BatteryManager.EXTRA_LEVEL

时间:2015-08-11 15:55:01

标签: java android batterylevel batterymanager

我试图通过以下方式获取设备当前的电池电量:

    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'

这实际上可能永远不会影响我的应用程序,但由于有最终产品取决于它,我想知道,我如何应对这个潜在问题? 有没有办法重组上面的内容以达到相同的结果(获得电池的当前充电状态)?

2 个答案:

答案 0 :(得分:3)

registerReceiver州的Javadoc:

 * @return The first sticky intent found that matches <var>filter</var>,
 *         or null if there are none.

因此, 可能会返回null事件。您已经处理了值无效的情况((level == -1 || scale == -1)),因此我建议您只检查intent是否为null,并提前返回该值:

if (batteryIntent == null) {
    return -1;
}

答案 1 :(得分:0)

我会抛出一个try / catch,因为你知道它可能会抛出错误,然后你可以在它发生的时候适当地处理它。

try {
    //your code here
} catch (NullPointerException e) {
    //handle the error here, maybe return -1?
}