在没有 Apache HTTP 客户端的情况下从流中解码位图
Decode bitmap from stream without Apache HTTP Client
直到最近,我使用以下代码使用 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());
一切正常。
现在 Android6,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;
这行不通。 bitmap
将始终是 null
对于使用旧代码的相同图像资源。
有没有人对此有任何见解?以下是我尝试过的其他问题以及它们为何不起作用:
- Android: bitmapfactory.decodestream returns null(答案使用已弃用的 methods/classes)
- Bitmap.decodeStream returns null on specific existing (And working) images(同上)
使用 Volley 或 Picasso。这是推荐的方法。
问题是由一个简单的 HTTP/HTTPS 问题引起的。图像资源是从 http://
地址请求的。服务器设置为向匹配的 https://
地址发出 307(临时重定向)。
虽然HttpURLConnection
的默认是跟随重定向,问题中给出的代码并没有起作用。仅供参考,毕加索也没有加载图像。
通过其 https://
地址请求图像解决了问题。
直到最近,我使用以下代码使用 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());
一切正常。
现在 Android6,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;
这行不通。 bitmap
将始终是 null
对于使用旧代码的相同图像资源。
有没有人对此有任何见解?以下是我尝试过的其他问题以及它们为何不起作用:
- Android: bitmapfactory.decodestream returns null(答案使用已弃用的 methods/classes)
- Bitmap.decodeStream returns null on specific existing (And working) images(同上)
使用 Volley 或 Picasso。这是推荐的方法。
问题是由一个简单的 HTTP/HTTPS 问题引起的。图像资源是从 http://
地址请求的。服务器设置为向匹配的 https://
地址发出 307(临时重定向)。
虽然HttpURLConnection
的默认是跟随重定向,问题中给出的代码并没有起作用。仅供参考,毕加索也没有加载图像。
通过其 https://
地址请求图像解决了问题。