问题
When copying String
from any browser page, pasteData
works properly.
However when copying SpannedString
from a message sent item editor(field), the application crashes and shows this error message:
java.lang.ClassCastException: android.text.SpannableString cannot be cast to java.lang.String
My code:
// 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();
where the ClipboardManager
instance defined as clipBoard
, below:
clipBoard = (ClipboardManager) context.getSystemService(context.CLIPBOARD_SERVICE);
clipBoard.addPrimaryClipChangedListener(new ClipboardListener());
All I'm trying to do is use pasteData
in String
format.
How to get rid of this error?
Any help is appreciated.
回答1:
SpannableString is not String directly. so, you can not cast. but, it can be converted to string. you can convert something to string with concatenating with empty string.
pasteData = "" + item.getText();
回答2:
From CharSequence.toString()
Returns a string with the same characters in the same order as in this sequence.
You need to use next code.
String pasteData = item.getText().toString();
You can not cast to android.text.SpannableString
because item.getText()
returns CharSequence
, there are a lot of implementations of it
回答3:
If your Spanned text only containing HTML content then you can convert it using Html.toHtml()
String htmlString = Html.toHtml(spannedText);
回答4:
It has worked for me
String htmlString = String.valueOf(Html.fromHtml(contenttext,Html.FROM_HTML_MODE_COMPACT));
来源:https://stackoverflow.com/questions/27479181/why-show-java-lang-classcastexception-android-text-spannablestring-cannot-be-ca