Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AlarmManager.setExact()可能的错误警告NullPointerException_Android_Nullpointerexception_Warnings_Alarmmanager - Fatal编程技术网

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

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

我正在尝试学习如何在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是什么,但我无法确定代码中编写的哪些内容可能导致该特定异常?

该警告告诉您可能发生的
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+实现这样的功能