为啥显示 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?的主要内容,如果未能解决你的问题,请参考以下文章