Android 不使用Apache HTTP客户端从流解码位图

Android 不使用Apache HTTP客户端从流解码位图,android,http-get,android-bitmap,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(); Buffere

直到最近,我使用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());
这一切都很好

现在使用安卓6时,Apache HTTP客户端已被弃用。不必担心,我想,只需使用
java.net.HttpUrlConnection
来代替这里的建议:

我在其他问题中找到的代码是:

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;
这不管用<对于使用旧代码的同一图像资源,代码>位图将始终为
null

有人对此有什么见解吗?以下是我尝试过的其他问题以及它们不起作用的原因:

  • (答案使用不推荐的方法/类)
  • (同上)

使用截击或毕加索。这是推荐的方法。

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

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


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

Hmm您是否尝试过使用毕加索或Glide从url获取图像?这两个库都是很好的库,可以真正完成这项任务well@Shmuel我没有。将库用于一项看似微不足道的任务有点过头了。如果这里没有答案,我会试一试。而且,你的两个实现是不可比的。删除
setRequestProperty()
setDoInput()
@commonware,但结果相同。然后尝试自己使用
InputStream
查看是否从服务器收到某种HTTP错误。或者,切换到现代HTTP客户端,如OkHttp。或者,保留现有代码(或多或少),并使用Apache对其HttpClient库的独立打包。或者,正如Shmuel所建议的,使用。