为啥显示 java.lang.ClassCastException: android.text.SpannableString 不能转换为 java.lang.String?

Posted

技术标签:

【中文标题】为啥显示 java.lang.ClassCastException: android.text.SpannableString 不能转换为 java.lang.String?【英文标题】:Why show java.lang.ClassCastException: android.text.SpannableString cannot be cast to java.lang.String?为什么显示 java.lang.ClassCastException: android.text.SpannableString 不能转换为 java.lang.String? 【发布时间】:2015-02-13 06:17:11 【问题描述】:

从任何浏览器页面复制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());

我要做的就是以String 格式使用pasteData。 如何摆脱这个错误? 任何帮助表示赞赏。

【问题讨论】:

【参考方案1】:

来自CharSequence.toString()

以与此序列相同的顺序返回具有相同字符的字符串。

您需要使用下一个代码。

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

你不能转换成android.text.SpannableString,因为item.getText()返回CharSequence,it的实现有很多

【讨论】:

答案的宝石。听起来微不足道,但可以省去很多麻烦。谢谢!【参考方案2】:

SpannableString 不是直接的 String。所以,你不能投。但是,它可以转换为字符串。您可以通过与空字符串连接将某些内容转换为字符串。

pasteData = "" + item.getText();

【讨论】:

不鼓励仅使用代码的答案,因为它可能会使 OP 和未来的读者感到困惑。相反,请解释代码的作用。 这是一种变通方法,并没有解决根本问题。问题是 item.getText() 返回的是 CharSequence,而不是 String。 OP 应该使用 item.getText().toString() 将 CharSequence 转换为 String【参考方案3】:

如果您的跨区文本仅包含 html 内容,那么您可以使用 Html.toHtml() 对其进行转换

String htmlString = Html.toHtml(spannedText);

【讨论】:

【参考方案4】:

这就是 Kotlin 中对我有用的:

val str = text.toString()

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

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

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

示例:

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

【讨论】:

以上是关于为啥显示 java.lang.ClassCastException: android.text.SpannableString 不能转换为 java.lang.String?的主要内容,如果未能解决你的问题,请参考以下文章

为啥不显示披露指标?

WIN32显示图片,为啥不显示?

为啥在HUD显示之前显示警报时不显示MBProgressHUD?

为啥显示以下错误? [复制]

为啥帖子不显示在主页上?

为啥 JQGrid 无法显示数据?