DateUtils.getRelativeTimeSpanString()在Android 5上失败,并出现NullPointerException

时间:2018-07-15 12:55:22

标签: android datetime kotlin

当尝试将DateUtils.getRelativeTimeSpanString(...)与某些特定值一起使用时,我遇到一个相当奇怪的问题。

我正在这样使用它:

private fun formatPubDate(pubDate: String): String {
   val dateFormat = SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.ENGLISH)
   val date = dateFormat.parse(pubDate)
   val flags = DateUtils.FORMAT_SHOW_DATE or DateUtils.FORMAT_SHOW_TIME or DateUtils.FORMAT_SHOW_YEAR or DateUtils.FORMAT_ABBREV_MONTH

   return DateUtils.getRelativeTimeSpanString(date.time, System.currentTimeMillis(),
                DateUtils.MINUTE_IN_MILLIS, flags).toString()
}

为什么奇怪?由于以下代码可以正常工作,因此请在控制台“ 6天前”上打印:

Log.d("DATE_TAG", formatPubDate("Fri, 09 Jul 2018 07:04:05 +0000"))

但是,如果日期从7月9日更改为7月8日:

Log.d("DATE_TAG", formatPubDate("Fri, 08 Jul 2018 07:04:05 +0000"))

然后应用程序崩溃,但出现以下异常:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.ContentResolver android.content.Context.getContentResolver()' on a null object reference
        at android.text.format.DateFormat.is24HourFormat(DateFormat.java:131)
        at android.text.format.DateUtils.formatDateRange(DateUtils.java:822)
        at android.text.format.DateUtils.formatDateRange(DateUtils.java:650)
        at android.text.format.DateUtils.formatDateRange(DateUtils.java:627)
        at android.text.format.DateUtils.getRelativeTimeSpanString(DateUtils.java:350)
        at test.com.recyclerviewwidth.MainActivity.formatPubDate(MainActivity.kt:26)
        at test.com.recyclerviewwidth.MainActivity.onCreate(MainActivity.kt:18)

到目前为止,该问题仅在Android 5,三星设备和仿真器上可重现(在Android 8和7上运行正常)。

有人知道这里可能有什么问题吗?

1 个答案:

答案 0 :(得分:0)

问题来自于FORMAT_SHOW_TIME标志:我在这里有相同的pb,并通过捕获异常并再次调用DateUtil方法而没有FORMAT_SHOW_TIME标志,以某种肮脏的方式对其进行了修复 / strong>。