Android 7+设备使用Universal Image Loader出现FileNotFoundException求助
解决Universal Image Loader无法加载带HTML转义参数的图片链接问题
嘿,这个问题我之前也碰到过!核心原因是API返回的URL里带了HTML转义的&,而Universal Image Loader(UIL)默认不会自动解码这些转义字符,导致请求的URL参数格式错误——服务器会把&当成参数名的一部分,而不是参数分隔符,自然识别不了正确的参数,最后返回404错误,也就是你看到的FileNotFoundException。
下面给你两种简单有效的解决方案:
方案1:直接替换转义字符
如果你的链接里只有&这一种转义问题,直接做字符串替换最快捷:
// 原API返回的有问题的链接 String problematicUrl = "https://img.anews.com?url=https://img.anews.com/media/posts/images/20180419/89413447.jpg&w=1080&h=735"; // 把&替换成真实的参数分隔符& String fixedUrl = problematicUrl.replace("&", "&"); // 用修复后的URL调用UIL加载图片 ImageLoader.getInstance().displayImage(fixedUrl, yourImageView);
方案2:通用HTML解码(推荐)
如果API后续可能返回其他HTML转义字符(比如<、>等),用Android自带的Html.fromHtml()做解码更通用:
import android.text.Html; String problematicUrl = "https://img.anews.com?url=https://img.anews.com/media/posts/images/20180419/89413447.jpg&w=1080&h=735"; // 解码所有HTML转义字符 String fixedUrl = Html.fromHtml(problematicUrl).toString(); ImageLoader.getInstance().displayImage(fixedUrl, yourImageView);
额外注意点
- 如果你想让UIL全局处理这类URL,可以自定义
BaseImageDownloader,在getStreamFromNetwork()方法里先对URL做解码处理,这样就不用每次加载都手动处理了。 - 确认你的UIL版本是较新的,旧版本可能对嵌套URL的参数解析有额外问题,升级到最新稳定版(比如1.9.5)能避免一些潜在bug。
内容的提问来源于stack exchange,提问作者Sergey Emeliyanov
相关产品推荐
相关产品推荐

