AlarmManager.setExact()可能的错误警告NullPointerException

时间:2018-07-19 00:38:04

标签: android nullpointerexception warnings alarmmanager

我正在尝试学习如何在Android中使用AlarmManager,因此我是AlarmManager类的新手,但不是Java的新手。 我正在使用Android Studio 3.1.3。 使用AlarmManager.setExact()时,我在编辑器中收到警告。

代码:

    AlarmManager alarmMgr = (AlarmManager)activity.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent("delayed");
    PendingIntent alarmIntent = PendingIntent.getBroadcast(activity, 0, intent, PendingIntent.FLAG_ONE_SHOT);
    alarmMgr.setExact(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis() + (120 * 1000), alarmIntent);

我已成功运行此代码,从当前时间开始2秒触发了警报。

警告在“ setExact”部分上突出显示,对我来说毫无意义,所以我想知道是否有人可以为我提供一些帮助。

警告/错误:

    Method invocation 'seExact' may produce 'java.lang.NullPointerException'

我通常了解NullPointerException是什么,但是我无法弄清楚代码中写的是该特定Exception的潜在可能性?

2 个答案:

答案 0 :(得分:0)

该警告告诉您可能 .centered-top-container { background-image: url(\/\/4.bp.blogspot.com\/-S3EDENzAc5M\/W081co1cPbI\/AAAAAAAABjs\/gDO0eWSzxmUM8oaKfcdmKanYu1iAB3pZACK4BGAYYCw\/w1600\/glitters1.jpg); } 。如果它无法将go through each of the nodes: if random(0,10) == 1: drop/turn off node i 的返回值转换为NullPointerException或返回null,则getSystemService在此行将为null:

AlarmManager

,当您尝试在下一行使用它时将为null。为了避免警告,您可以先使用null进行检查:

alarmMgr

答案 1 :(得分:0)

getSystemService()的返回类型带有注释@Nullable,尝试在可为空的对象上调用方法是潜在的NPE。

您可以通过以下方式取消警告:不要在乎潜在的NPE

//noinspection ConstantConditions
alarmMgr.setExact(...);

或添加一个空检查以确保在运行时严格不为空。对于Java for API 19+,我更喜欢Objects.requireNonNull()