Android AlarmManager.setExact()可能的错误警告NullPointerException
我正在尝试学习如何在Android中使用AlarmManager,因此我对AlarmManager类不熟悉,但对Java不熟悉。 我正在使用Android Studio 3.1.3。 使用AlarmManager.setExact()时,我在编辑器中收到警告 守则:Android AlarmManager.setExact()可能的错误警告NullPointerException,android,nullpointerexception,warnings,alarmmanager,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
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是什么,但我无法确定代码中编写的哪些内容可能导致该特定异常?该警告告诉您可能发生的
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);
}
getSystemService()
返回类型被注释为@Nullable
,尝试在Nullable上调用方法是一种潜在的NPE
您可以抑制警告,使其不关心潜在的NPE
//noinspection ConstantConditions
alarmMgr.setExact(...);
或者添加空检查以确保在运行时严格非空。我更喜欢用Java for API 19+实现这样的功能