android.text.SpannableString无法强制转换为java.lang.String

时间:2015-06-25 07:11:15

标签: android bundle spannablestring

String s = extras.getString("android.text");

我正在尝试从捆绑中读取值。但我并不完全知道我想要阅读的价值类型。当我尝试使用getString读取它时,我得到以下错误

java.lang.ClassCastException: android.text.SpannableString cannot be cast to java.lang.String
at android.os.BaseBundle.getString(BaseBundle.java:921)
at com.example.myapp.services.NLService.constructNotificationObject(NLService.java:67)
at com.example.myapp.services.NLService.onNotificationPosted(NLService.java:100)

值的类型究竟是什么?我怎样才能以字符串格式获取它?

编辑: 我试图读取的包不是由我创建的。所以我无法控制捆绑中传递的内容。 值的类型是SpannableString,但getString尝试将其强制转换为产生错误的String。 这个问题似乎与this one重复。一种解决方法是执行此操作((SpannableString)extras.get("android.text")).toString()

2 个答案:

答案 0 :(得分:0)

您可能已经通过意图传递了SpannableString。您不能将其直接转换为字符串。试试这个

String s = extras.getString("android.text") + "";

答案 1 :(得分:0)

您需要逐行读取文件,并使用StringBuilder

来构建String
 .login-div{
        background: #fff none repeat scroll 0 0;
        height: 500px;
        left: 50%;
        width: 500px;
        right: 0;
        z-index: 99999;
        top: 20%;
        position: fixed;
    }

如果您认为没有字符编码,则可以更快地读取数据。例如ASCII-7但它没有太大的区别。您对数据的处理很可能需要更长的时间。

一种不太常见的模式,可以避免线路泄漏的范围。

try (BufferedReader br = new BufferedReader(new FileReader(file))) {
   StringBuilder sb = new StringBuilder();
    while ((line = br.readLine()) != null) {
       sb.append(line);
    }
}