我正在尝试学习如何在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的潜在可能性?
答案 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()
。