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

15 java string clipboard android spannablestring

String从任何浏览器页面复制时,pasteData正常工作.但是,SpannedString从邮件发送项目编辑器(字段)复制时,应用程序崩溃并显示以下错误消息:

java.lang.ClassCastException: android.text.SpannableString cannot be cast to java.lang.String
Run Code Online (Sandbox Code Playgroud)

我的代码:

// 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();
Run Code Online (Sandbox Code Playgroud)

其中ClipboardManager实例定义clipBoard如下:

clipBoard = (ClipboardManager) context.getSystemService(context.CLIPBOARD_SERVICE);
clipBoard.addPrimaryClipChangedListener(new ClipboardListener());
Run Code Online (Sandbox Code Playgroud)

所有我想要做的是使用pasteDataString的格式.如何摆脱这个错误?任何帮助表示赞赏.

gio*_*gio 32

来自CharSequence.toString()

返回具有相同字符的字符串,其顺序与此序列中的顺序相同.

您需要使用下一个代码.

String pasteData = item.getText().toString();
Run Code Online (Sandbox Code Playgroud)

你无法投射到android.text.SpannableString因为item.getText()回报CharSequence,也有很多的实现


Ade*_*dem 16

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

pasteData = "" + item.getText();
Run Code Online (Sandbox Code Playgroud)

  • 这是一个解决方法,并没有解决根本问题.问题是item.getText()返回CharSequence,而不是String.OP应该使用item.getText().toString()将CharSequence转换为String (14认同)