【问题标题】:Unable to download images using URL on Android无法在 Android 上使用 URL 下载图像
【发布时间】:2016-11-01 17:11:10
【问题描述】:

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

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

查看示例,这显然是一种非常常见的方法。但是,它输出空值。我还尝试使用另一个库,毕加索:

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 我的意思是它没有任何意义,因为它击中了图像但随后无法加载它。
  • 我最终使用 UniversalImageLoader

标签: java android web-scraping picasso


【解决方案1】:

当您将图片网址放入浏览器时,它会重定向到 https://

将代码中的 url 更改为 https://,它应该可以工作。

302 Found 代码通常在发生重定向时使用。就像这里的情况一样。它被重定向到 https:// 协议,浏览器会看到它并检查重定向 url 的数据并将您带到那里。 Picasso 和 InputStream 不会检查重定向代码,因此不会加载图像,但同时不会返回错误,因为它不是 404 not found 响应。 在 wikipedia 上可以找到一份很好的 HTTP 响应代码列表。

如果你成功找到图片,你会得到一个 200 OK 返回码。

【讨论】:

  • 啊,我看到了,并认为它仍然可以与重定向一起使用。这是有道理的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-27
  • 1970-01-01
  • 2020-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多