无法在Android上使用URL下载图片

3

我正在尝试使用以下几行代码在我的Android应用程序中下载图像:

InputStream in = new java.net.URL(url).openStream();
mIcon11 = BitmapFactory.decodeStream(in);

看起来这是一种常见的方法,从例子中可以看出。然而,它输出了null。我还尝试使用另一个库,Picasso:

Picasso.with(context).load("http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png").into(iv);

这也无法正常工作,让我相信问题出在其它地方。当我记录onImageLoadFailed监听器时,我得到了如下信息:

com.squareup.picasso.Downloader$ResponseException: 302 Found
    at com.squareup.picasso.UrlConnectionDownloader.load(UrlConnectionDownloader.java:96)
    at com.squareup.picasso.NetworkRequestHandler.load(NetworkRequestHandler.java:47)

这没有任何意义。我的Android清单中已经有了互联网权限。有什么想法?


“这没有任何意义”--为什么呢?HTTP 302是常见的响应。如果您访问http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png,您将得到一个HTTP 302响应。 - CommonsWare
@CommonsWare 我的意思是它正在访问图像,但却无法加载它,这没有任何意义。 - Austin Gayler
我最终使用了UniversalImageLoader。 - neobie
1个回答

5

当您将图像URL输入到浏览器中时,它会重定向到https://。

在代码中更改您的URL为https://,然后它应该可以工作。

302 Found代码通常用于重定向。正如这里所发生的那样。它正在被重定向到https://协议,并且浏览器会看到它并检查重定向URL的数据并将您带到那里。 Picasso 和 InputStream 不会检查重定向代码,因此不会加载图像,但同时不会返回错误,因为它不是404未找到响应。 HTTP响应代码的良好列表可在维基百科上找到。

如果您成功找到图像,您将收到返回的200 OK代码。


啊,我看到并假设它仍然可以通过重定向来工作。这很合理。谢谢! - Austin Gayler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接