web-dev-qa-db-fra.com

Pourquoi afficher Java.lang.ClassCastException: Android.text.SpannableString ne peut pas être converti en Java.lang.String?

Lors de la copie de String à partir de n’importe quelle page de navigateur, pasteData fonctionne correctement. Toutefois, lors de la copie de SpannedString à partir d'un éditeur d'élément de message envoyé (champ), l'application se bloque et affiche le message d'erreur suivant:

Java.lang.ClassCastException: Android.text.SpannableString cannot be cast to Java.lang.String

Mon code:

// 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();

où l'instance ClipboardManager définie par clipBoard, ci-dessous:

clipBoard = (ClipboardManager) context.getSystemService(context.CLIPBOARD_SERVICE);
clipBoard.addPrimaryClipChangedListener(new ClipboardListener());

Tout ce que j'essaie de faire, c'est d'utiliser pasteData au format String. Comment se débarrasser de cette erreur? Toute aide est appréciée.

12
user4356416

SpannableString n'est pas une chaîne directement. alors, vous ne pouvez pas lancer. mais, il peut être converti en chaîne. vous pouvez convertir quelque chose en chaîne avec concaténation avec chaîne vide. 

pasteData = "" + item.getText();
16
Adem

De CharSequence.toString ()

Retourne une chaîne avec les mêmes caractères dans le même ordre que dans cette séquence.

Vous devez utiliser le code suivant. 

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

Vous ne pouvez pas transtyper en Android.text.SpannableString car item.getText() renvoie CharSequence, il existe de nombreuses implémentations de it

30
gio

Si votre texte fractionné contient uniquement du contenu HTML, vous pouvez le convertir à l'aide de Html.toHtml().

String htmlString = Html.toHtml(spannedText);
0
SilentKiller