Android 不使用Apache HTTP客户端从流解码位图
直到最近,我使用Apache HTTP客户端从web资源解码图像,代码如下: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
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://
地址发出307(临时重定向)
尽管HttpURLConnection
的默认设置是遵循重定向,但问题中给出的代码不起作用。仅供参考,毕加索也没有加载图像
通过其
https://
地址请求图像解决了问题。Hmm您是否尝试过使用毕加索或Glide从url获取图像?这两个库都是很好的库,可以真正完成这项任务well@Shmuel我没有。将库用于一项看似微不足道的任务有点过头了。如果这里没有答案,我会试一试。而且,你的两个实现是不可比的。删除setRequestProperty()
和setDoInput()
@commonware,但结果相同。然后尝试自己使用InputStream
查看是否从服务器收到某种HTTP错误。或者,切换到现代HTTP客户端,如OkHttp。或者,保留现有代码(或多或少),并使用Apache对其HttpClient库的独立打包。或者,正如Shmuel所建议的,使用。