2014-12-15 1 views
7

При копировании String с любой страницы браузера, pasteData работает правильно. Однако при копировании SpannedString из сообщения, отправленного редактора элемента (поля), аварий приложений и показывает это сообщение об ошибке:Зачем показывать java.lang.ClassCastException: android.text.SpannableString не может быть добавлено в java.lang.String?

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 формат. Как избавиться от этой ошибки? Любая помощь приветствуется.

ответ

11

SpannableString не является строкой напрямую. так что вы не можете бросить. но его можно преобразовать в строку. вы можете преобразовать что-то в строку с конкатенацией пустой строкой.

pasteData = "" + item.getText(); 
+0

только код ответа не рекомендуется, поскольку это может запутать ОП и будущих читателей. Вместо этого объясните, что делает код. –

+12

Это работа вокруг и не затрагивает проблему с корнем. Проблема в том, что item.getText() возвращает CharSequence, а не строку. OP должен использовать item.getText(). ToString() для преобразования CharSequence в String –

1

Если Составной только текст, содержащий содержание HTML, то вы можете преобразовать его с помощью Html.toHtml()

String htmlString = Html.toHtml(spannedText); 
21

От CharSequence.toString()

Возвращает строку с теми же персонажами в том же порядке, как и в этой последовательности.

Необходимо использовать следующий код.

String pasteData = item.getText().toString(); 

Вы не можете бросить в android.text.SpannableString потому что item.getText() возвращается CharSequence, есть много реализаций it

+0

Gem ответа. Звучит тривиально, но сэкономит много головной боли. Спасибо ! – user2582651