开发RSS Feed应用时,如何移除页面出现的[OBJ]标识?
解决RSS Feed解析后出现[OBJ]标识的问题
嘿,我刚好碰到过这个情况!你看到的[OBJ]标识,根源在于你调用Html.fromHtml()解析RSS内容后得到的Spanned对象里,包含了ImageSpan元素——当你直接把这个Spanned转换成String时,Android会把这类非文本的Span默认输出为[OBJ],而且刚好只在有图片的场景出现,和你观察到的现象完全吻合。
下面给你两个实用的解决思路:
方案1:提前过滤HTML中的图片标签
如果你的需求里不需要保留图片相关内容,可以先把HTML里的<img>标签全部过滤掉,再进行解析,这样就不会生成ImageSpan了:
// 先移除所有img标签 String cleanedHtml = current.getTextContent().replaceAll("<img[^>]*>", ""); // 再处理剩余内容 item.setDescription(Html.fromHtml(cleanedHtml).toString().replaceAll("\n", "").trim());
方案2:替换Spanned中的ImageSpan(保留自定义占位)
如果你想给图片留个占位提示(比如显示「[图片]」),而不是直接删除,可以手动遍历Spanned对象,把里面的ImageSpan替换成你想要的文本:
Spanned parsedContent = Html.fromHtml(current.getTextContent()); StringBuilder contentBuilder = new StringBuilder(parsedContent.toString()); // 取出所有ImageSpan ImageSpan[] imageSpans = parsedContent.getSpans(0, parsedContent.length(), ImageSpan.class); // 倒序替换(避免替换后索引偏移) for (int i = imageSpans.length - 1; i >= 0; i--) { ImageSpan span = imageSpans[i]; int start = parsedContent.getSpanStart(span); int end = parsedContent.getSpanEnd(span); // 把[OBJ]替换成你想要的内容,比如空字符串或者「[图片]」 contentBuilder.replace(start, end, "[图片]"); } item.setDescription(contentBuilder.toString().replaceAll("\n", "").trim());
为什么原来的代码会出问题?简单来说:Html.fromHtml()解析<img>标签时,会创建ImageSpan来表示图片,但Spanned.toString()方法无法把这类富文本元素转换成普通字符串,就用[OBJ]来占位了——这是Android SDK的默认行为哦。
内容的提问来源于stack exchange,提问作者Demeteor
相关产品推荐
相关产品推荐

