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



我正在努力学习如何在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?

getSystemService()返回类型被注释为@Nullable,尝试调用可为null的方法是潜在的NPE。

您可以通过抑制不关心潜在NPE的警告

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

或者添加一个null检查以确保在运行时严格的非null性。在API 19+的Java中,我更喜欢Objects.requireNonNull()

该警告告诉您可能存在NullPointerException。如果它不能将getSystemService的返回值强制转换为AlarmManager,或者如果它返回null,则alarmMgr将从此行为null:

AlarmManager alarmMgr = (AlarmManager)activity.getSystemService(Context.ALARM_SERVICE);

当您尝试在后面的行中使用它时,它将为null。为了避免警告,您可以在使用之前先检查null:

if( alarmMgr != null ) {
alarmMgr.setExact(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis() + (120 * 1000), alarmIntent);
}

相关内容

最新更新