【发布时间】:2021-04-12 18:15:41
【问题描述】:
我一直在尝试创建一个每天早上 8:30 触发的警报,但我的应用程序不断崩溃 并且 logcat 不断向我显示此错误 尝试在空对象引用上调用虚拟方法“long java.util.Calendar.getTimeInMillis()”
我什至检查了 android doc 他们的代码是一样的。请帮忙
class MotivationViewModel(application: Application) : AndroidViewModel(application) {
private var alarmManager: AlarmManager? = null
private var notifyPendingIntent: PendingIntent
init {
alarmManager = application.getSystemService(Context.ALARM_SERVICE) as AlarmManager
notifyPendingIntent = Intent(application, AlarmReceiver::class.java).let { intent ->
PendingIntent.getBroadcast(application, 0, intent, 0)
}
//start alarm
startAlarm()
}
// Set the alarm to start at approximately 8:30 p.m.
private val calendar: Calendar = Calendar.getInstance().apply {
timeInMillis
set(Calendar.HOUR_OF_DAY, 1)
set(Calendar.MINUTE, 44)
set(Calendar.SECOND, 0)
}
val triggerTime = SystemClock.elapsedRealtime() + 1_000L * 10
private fun startAlarm() {
if (alarmManager != null) {
alarmManager?.setInexactRepeating(
AlarmManager.RTC_WAKEUP,
AlarmManager.INTERVAL_DAY,
calendar.timeInMillis,
notifyPendingIntent
)
}
}
}
这是我的完整 viewModel 代码
【问题讨论】:
-
这意味着您的日历为空。也许您的“私人 val 日历”在 startAlarm() 中不可见?
-
我在 ViewModel 中使用它会导致它
-
也许分享比这更多的代码,因为我不知道这里是什么。
-
尝试将私有 val 日历和 val 触发时间移到 init 之上。我不确定这在 Kotlin 中是如何工作的,但您在 init 中使用了 startAlarm() 方法。也许在创建这两个之前调用了 init。
-
我很高兴能帮上忙。编码愉快!
标签: android kotlin nullpointerexception alarmmanager