You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:33:18