Пытаюсь отобразить в приложении информацию об уведомлениях и иногда получаю сообщение об ошибке:
Fatal Exception: java.util.UnknownFormatConversionException Conversion = 'End of String'
Это загадка, но я чувствую, если смогу понять, что означает «Конец строки», я быть в пути. Вот код, который выдает ошибку
class NotificationsListItemViewHolder(
itemView: View,
private val appNameAndTime: String,
private val listener: (NotificationInfo, Int, Boolean, Boolean) -> Unit) : RecyclerView.ViewHolder(itemView) {
var notificationInfo: NotificationInfo? = null
fun bind(notification: NotificationInfo) {
if(isIncludedPackage(notification.packageName))
{
applyAlternateTheme(itemView)
}else {
applyTheme(itemView)
}
notificationInfo = notification
itemView.apply {
appNameTime.text = String.format(appNameAndTime, notification.appName, getTimeAgo(System.currentTimeMillis(), notification.timestamp))
title.text = notification.title
body.text = notification.bodyText
if (notification.smallIconPath != null) {
Glide.with(this).load(notification.smallIconPath).into(appIcon)
/*
if (ThemeManager.currentTheme.dark) {
appIcon.setColorFilter(Color.WHITE)
} else {
appIcon.setColorFilter(Color.BLACK)
}
Следующая строка (из приведенного выше кода) - это место, где возникает фатальное исключение (ну, фактически в коде Java)
appNameTime.text = String.format(appNameAndTime, notification.appName, getTimeAgo(System.currentTimeMillis(), notification.timestamp))
Здесь создается строка формата
<string name="app_name_timestamp" formatted="false">%s ・ %s</string>
... и это XML определение app_name_timestamp приводится в исполнение следующим классом:
class NotificationsAdapter(
val data: MutableList<NotificationInfo> = mutableListOf(),
private val listener: (NotificationInfo, Int, Boolean, Boolean) -> Unit
) : RecyclerView.Adapter<NotificationsListItemViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NotificationsListItemViewHolder {
val itemView = LayoutInflater.from(parent.context).inflate(R.layout.view_notification, parent, false)
return NotificationsListItemViewHolder(itemView, parent.context.resources.getString(R.string.app_name_timestamp)) {notificationInfo, position, longClick, dismiss ->
listener(notificationInfo, position, longClick, dismiss)
}
}
Шаблон для String.format - это первый параметр (переданный в функцию как appNameAndTime) всегда: «% s ・% s» и, за исключением некоторых редких сбоев, предназначен для форматирования двух других параметров, чтобы они выглядели следующим образом при отображении: «Twitter ・ 20м "
Опять пытаюсь расшифровать ошибку. Я проводил различные тесты, такие как жесткое кодирование пустых строк во втором и третьем параметрах, но до сих пор ничто не приводило к такой же ошибке.
В качестве ответа я бы согласился - «вот где вы можете получить спецификацию c информация об этом исключении ». Указатель, где смотреть.