Ответ 1
SpannableString не является строкой напрямую. так что вы не можете бросить. но его можно преобразовать в строку. вы можете преобразовать что-то в строку с конкатенацией пустой строкой.
pasteData = "" + item.getText();
При копировании String
с любой страницы браузера pasteData
работает правильно.
Однако при копировании SpannedString
из редактора отправленных сообщений (поля) приложение сбой и показывает это сообщение об ошибке:
java.lang.ClassCastException: android.text.SpannableString cannot be cast to java.lang.String
Мой код:
// since the clipboard contains plain text.
ClipData.Item item = clipBoard.getPrimaryClip().getItemAt(0);
// Gets the clipboard as text.
String pasteData = new String();
pasteData = (String) item.getText();
где экземпляр ClipboardManager
определяется как clipBoard
, ниже:
clipBoard = (ClipboardManager) context.getSystemService(context.CLIPBOARD_SERVICE);
clipBoard.addPrimaryClipChangedListener(new ClipboardListener());
Все, что я пытаюсь сделать, это использовать pasteData
в формате String
.
Как избавиться от этой ошибки?
Любая помощь приветствуется.
SpannableString не является строкой напрямую. так что вы не можете бросить. но его можно преобразовать в строку. вы можете преобразовать что-то в строку с конкатенацией пустой строкой.
pasteData = "" + item.getText();
Возвращает строку с теми же символами в том же порядке, что и в этой последовательности.
Вам нужно использовать следующий код.
String pasteData = item.getText().toString();
Вы не можете использовать android.text.SpannableString
, потому что item.getText()
возвращает CharSequence
, существует много реализаций it
Если ваш Spanned текст содержит только HTML-контент, вы можете его преобразовать с помощью Html.toHtml()
String htmlString = Html.toHtml(spannedText);
У меня это String htmlString = String.valueOf(Html.fromHtml(contenttext,Html.FROM_HTML_MODE_COMPACT));