#android #kotlin #nullpointerexception
#Android #kotlin #исключение nullpointerexception
Вопрос:
У меня есть следующий фрагмент кода.
var date1: Date? = null
try {
date1 = df1.parse(startDate)
} catch (e: ParseException) {
e.printStackTrace()
}
val cal1: Calendar? = Calendar.getInstance()
cal1?.time = date1
И я получил NPE в последней строке. Вот трассировка стека. Это не очень часто, но иногда происходит.
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'long java.util.Date.getTime()' on a null object reference
at java.util.Calendar.setTime(Calendar.java:1749)
at ui.interviewslot.InterviewSlotActivity.getDates(InterviewSlotActivity.kt:443)
at ui.interviewslot.InterviewSlotActivity.setUI(InterviewSlotActivity.kt:125)
at ui.interviewslot.InterviewSlotActivity$onCreate$1.onChanged(InterviewSlotActivity.kt:78)
at ui.interviewslot.InterviewSlotActivity$onCreate$1.onChanged(InterviewSlotActivity.kt:33)
at androidx.lifecycle.LiveData.considerNotify(LiveData.java:113)
at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:131)
at androidx.lifecycle.LiveData.setValue(LiveData.java:289)
at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java:33)
at androidx.lifecycle.LiveData$1.run(LiveData.java:91)
at android.os.Handler.handleCallback(Handler.java:808)
at android.os.Handler.dispatchMessage(Handler.java:101)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7425)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
Устройство: HUAWEI P20 Lite
Версия Android: 8.0.0
Комментарии:
1. Что, если date1 равно нулю?
2. Пожалуйста, опубликуйте результат
println(date)
3. @DalijaPrasnikar Извините, ребята, я пропустил эту часть. Я не проверял, что такое cal1? .время делает. Спасибо
Ответ №1:
calendar.setTime
Метод вызывает getTime
по своему аргументу. Это вызовет NPE, если аргумент null
. Я предполагаю, что ваша date1
переменная равна null, потому что синтаксический анализ не удался. Вы можете исправить это, выполнив это:
val date1: Date? = try {
df1.parse(startDate)
} catch (e: ParseException) {
e.printStackTrace()
null
}
if (date1 != null) {
val cal1: Calendar? = Calendar.getInstance()
cal1?.time = date1
}