android - 在没有 Apache HTTP 客户端的情况下从流中解码位图

标签 android http-get android-bitmap

直到最近,我使用以下代码使用 Apache HTTP 客户端从 Web 资源中解码图像:

HttpGet httpRequest = new HttpGet(params[0].toURI());

HttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(httpRequest);

HttpEntity entity = response.getEntity();
BufferedHttpEntity bufferedEntity = new BufferedHttpEntity(entity);

return BitmapFactory.decodeStream(bufferedEntity.getContent());

这一切都工作得很好。

现在在 Android 6 中,Apache HTTP 客户端已被弃用。不用担心,我想,只需按照此处的建议使用 java.net.HttpUrlConnection 即可:

http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-apache-http-client

我在其他问题中尝试过的代码是:

HttpURLConnection connection = (HttpURLConnection) params[0].openConnection();
// connection.setRequestProperty("User-Agent", "");
connection.setRequestMethod("GET");
// connection.setDoInput(true);
connection.connect();

InputStream inputStream = connection.getInputStream();

Bitmap bitmap = BitmapFactory.decodeStream(inputStream);

inputStream.close();

return bitmap;

这行不通。对于使用旧代码的相同图像资源,bitmap 将始终为 null

有没有人对此有任何见解?以下是我尝试过的其他问题以及它们为何不起作用:

最佳答案

问题是由一个简单的 HTTP/HTTPS 问题引起的。图像资源是从 http:// 地址请求的。服务器设置为向匹配的 https:// 地址发出 307(临时重定向)。

尽管 HttpURLConnection 的默认设置是遵循重定向,但问题中给出的代码不起作用。仅供引用,毕加索也没有加载图像。

通过其 https:// 地址请求图像解决了问题。

关于android - 在没有 Apache HTTP 客户端的情况下从流中解码位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35437912/

相关文章:

Android位图回收

android - 新的 Android Studio 2.2 不适用于 Ubuntu/Linux

java - 从 Fragment 更改为 Activity

macos - 操作系统 X : equivalent of Linux's wget

安卓:内存不足

c# - Xamarin:Android - 大位图的 OutOfMemory 异常 - 如何解决?

java - If/else 条件与 firebase 值

java - Opencv Android上的矩阵乘法给出断言错误

仅 VPN 网站上的 Java HTTP 请求

android - 如何在 android 中为 HttpGet 请求添加 NameValuePairs