Приложение
Android в производственных отчетах Crashlytics показывает, что isAfter()
, используемое с двумя LocalDateTime, вызывает исключение NullPointerException.
Caused by java.lang.NullPointerException: Attempt to read from field 'int org.threeten.bp.LocalDate.year' on a null object reference
at org.threeten.bp.LocalDate.compareTo0 + 2(:2)
at org.threeten.bp.LocalDateTime.compareTo0 + 6(:6)
at org.threeten.bp.LocalDateTime.isAfter + 6(:6)
Наша нулевая проверка не может передать нулевой LocalDate / LocalDateTime.
private fun isLastUpdateChanged(
templatesCacheInfo: TemplatesCacheInfo?,
lastUpdateDate: LocalDateTime?
): Boolean {
return if (lastUpdateDate != null &&
templatesCacheInfo != null &&
templatesCacheInfo.lastUpdate != null) {
templatesCacheInfo.lastUpdate?.let {
lastUpdateDate.isAfter(it)
} ?: false
} else false
}
data class TemplatesCacheInfo(
val lastUpdate: LocalDateTime,
val templatesLanguage: String,
val appVersion: String?
) : Serializable
(Этот код выполняет слишком много пустых проверок, но все равно не работает и вызывает нулевое значение указатели на производство)
Может быть вещь: объект TemplatesCacheInfo
сохранен и извлечен из локальной базы данных в Android. Так что может быть проблема с сериализацией? Используемая база данных: https://github.com/pilgr/Paper
LocalDateTime и LocalDate от threeten
- import org.threeten.bp.LocalDateTime
Кто-нибудь сталкивался с этой проблемой? Любые советы по этому поводу?