为什么要显示java.lang.ClassCastException:android.text.SpannableString不能强制转换为java.lang.String?

时间:2014-12-15 07:26:08

标签: java android string clipboard spannablestring

从任何浏览器页面复制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。 如何摆脱这个错误? 任何帮助表示赞赏。

6 个答案:

答案 0 :(得分:31)

来自CharSequence.toString()

  

返回一个字符串,其字符与此序列中的字符顺序相同。

您需要使用下一个代码。

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

由于android.text.SpannableString返回item.getText(),您无法转发CharSequenceit

有很多实现

答案 1 :(得分:16)

SpannableString不是直接的String。所以,你不能施展。但是,它可以转换为字符串。你可以将一些东西转换为字符串,并与空字符串连接。

pasteData = "" + item.getText();

答案 2 :(得分:0)

如果您的跨区文字仅包含HTML内容,则可以使用Html.toHtml()

进行转换
String htmlString = Html.toHtml(spannedText);

答案 3 :(得分:0)

它对我有用 String htmlString = String.valueOf(Html.fromHtml(contenttext,Html.FROM_HTML_MODE_COMPACT));

答案 4 :(得分:0)

这是Kotlin中对我有用的东西:

val str = text.toString()

答案 5 :(得分:0)

你想像这样在xml文件中的Textview中添加属性

添加这个 -> android:bufferType="spannable"

示例:

    <TextView
        android:id="@+id/self_assessment_intro2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:bufferType="spannable"
        android:text="@string/self_assessment_intro2"
        android:textSize="@dimen/self_assessment_intro_text_size" />