NullPointerException для двух необнуляемых значений LocalDateTime в Kotlin - PullRequest
1 голос
/ 19 февраля 2020
Приложение

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

Кто-нибудь сталкивался с этой проблемой? Любые советы по этому поводу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...