【问题标题】: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。 如何摆脱这个错误? 任何帮助表示赞赏。

【问题讨论】:

    标签: java android string clipboard spannablestring


    【解决方案1】:

    来自CharSequence.toString()

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

    您需要使用下一个代码。

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

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

    【讨论】:

    • 答案的宝石。听起来微不足道,但可以省去很多麻烦。谢谢!
    【解决方案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_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" />
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-06-07
            • 2012-12-10
            • 1970-01-01
            • 1970-01-01
            • 2012-02-09
            • 2021-04-30
            • 1970-01-01
            相关资源
            最近更新 更多