【问题标题】:Calendar.getTimeInMillis() keep cauing app to crashCalendar.getTimeInMillis() 不断导致应用程序崩溃
【发布时间】: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


【解决方案1】:

SlothCoding

的帮助下稍作修正

我只是将日历移动到初始化块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-21
    • 2016-06-04
    • 2011-08-24
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多