2014-12-15 21 views
7

Khi sao chép String từ bất kỳ trang trình duyệt nào, pasteData hoạt động bình thường. Tuy nhiên khi sao chép SpannedString từ một tin nhắn gửi biên tập viên mục (lĩnh vực), các ứng dụng bị treo và thấy thông báo lỗi này:Tại sao không hiển thị java.lang.ClassCastException: android.text.SpannableString với java.lang.String?

java.lang.ClassCastException: android.text.SpannableString cannot be cast to java.lang.String 

Mã của tôi:

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

nơi dụ ClipboardManager định nghĩa là clipBoard, dưới đây :

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

Tất cả những gì tôi đang cố gắng làm là sử dụng pasteData trongĐịnh dạng. Làm cách nào để loại bỏ lỗi này? Bất kỳ trợ giúp nào được đánh giá cao.

Trả lời

11

SpannableString không phải là chuỗi trực tiếp. vì vậy, bạn không thể bỏ. nhưng, nó có thể được chuyển đổi thành chuỗi. bạn có thể chuyển đổi một cái gì đó thành chuỗi với nối với chuỗi rỗng.

pasteData = "" + item.getText(); 
+0

câu trả lời Mã-chỉ không được khuyến khích vì nó có thể nhầm lẫn OP và độc giả trong tương lai. Thay vào đó, hãy giải thích mã nào. –

+12

Đây là một công việc xung quanh, và không giải quyết vấn đề gốc. Vấn đề là item.getText() trả về một CharSequence, không phải là một String. OP nên sử dụng item.getText(). ToString() để chuyển đổi CharSequence thành String –

1

Nếu văn bản Spanned của bạn chỉ chứa nội dung HTML sau đó bạn có thể chuyển đổi nó bằng cách sử Html.toHtml()

String htmlString = Html.toHtml(spannedText); 
21

Từ CharSequence.toString()

Trả về một chuỗi với các ký tự giống nhau theo thứ tự như trong trình tự này.

Bạn cần sử dụng mã tiếp theo.

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

Bạn không thể cast để android.text.SpannableStringitem.getText() lợi nhuận CharSequence, có rất nhiều hiện thực của it

+0

Gem của một câu trả lời. Nghe có vẻ tầm thường nhưng tiết kiệm rất nhiều đau đầu. Cảm ơn bạn ! – user2582651

Các vấn đề liên quan