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

And*_*Res 5 datetime android 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()
}
Run Code Online (Sandbox Code Playgroud)

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

Log.d("DATE_TAG", formatPubDate("Fri, 09 Jul 2018 07:04:05 +0000"))
Run Code Online (Sandbox Code Playgroud)

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

Log.d("DATE_TAG", formatPubDate("Fri, 08 Jul 2018 07:04:05 +0000"))
Run Code Online (Sandbox Code Playgroud)

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

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)
Run Code Online (Sandbox Code Playgroud)

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

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

Edo*_*hes 0

问题来自于 FORMAT_SHOW_TIME 标志:我在这里有相同的 pb,并通过捕获异常并再次调用不带 FORMAT_SHOW_TIME 标志的DateUtil 方法以一种有点肮脏的方式修复它。