在没有Apache HTTP Client的情况下从流中解码位图

时间:2016-02-16 16:31:39

标签: android http-get android-bitmap

直到最近,我使用以下代码使用Apache HTTP Client从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 Client已被弃用。不用担心,我想,只需按照此处的建议使用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

有没有人对此有任何见解?以下是我尝试的其他问题以及它们无法解决的原因:

2 个答案:

答案 0 :(得分:1)

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

虽然HttpURLConnection的默认值是遵循重定向,但问题中给出的代码不起作用。 FYI Picasso也没有加载图像。

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

答案 1 :(得分:0)

使用Volley或Picasso。这是推荐的方法。