【发布时间】:2018-12-23 05:16:52
【问题描述】:
我在尝试将 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 上运行良好)。
有人知道这里可能出了什么问题吗?
【问题讨论】: