Android: bitmapfactory.возвращает значение null decodestream
Я попытался получить растровое изображение из пути Изображения. Но!--1--> возвращает null
значение.
код:
URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
connection.disconnect();
input.close();
Я искал на других сайтах, но я не получил решения.
5 ответов
есть решение :-)
HttpGet httpRequest = new HttpGet(URI.create(path) );
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = (HttpResponse) httpclient.execute(httpRequest);
HttpEntity entity = response.getEntity();
BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);
bmp = BitmapFactory.decodeStream(bufHttpEntity.getContent());
httpRequest.abort();
проблема заключалась в том, что после использования InputStream из HttpUrlConnection вы не можете перемотать и использовать тот же InputStream снова. Поэтому вам нужно создать новый InputStream для фактической выборки изображения. В противном случае мы должны прервать http-запрос.
public Bitmap getBitmapFromUrl(String url)
{
Bitmap bm = null;
InputStream is = null;
BufferedInputStream bis = null;
try
{
URLConnection conn = new URL(url).openConnection();
conn.connect();
is = conn.getInputStream();
bis = new BufferedInputStream(is, 8192);
bm = BitmapFactory.decodeStream(bis);
}
catch (Exception e)
{
e.printStackTrace();
}
finally {
if (bis != null)
{
try
{
bis.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
if (is != null)
{
try
{
is.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
return bm;
}
Не забудьте вызвать это в потоке (не основной поток)
используя следующий код, я могу загрузить изображение из url
String IMAGE_URL = "http://www.kolkatabirds.com/rainquail8vt.jpg";
//where we want to download it from
URL url;
try {
url = new URL(IMAGE_URL);
//open the connection
URLConnection ucon = url.openConnection();
//buffer the download
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is,1024);
//get the bytes one by one
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
//convert it back to an image
ByteArrayInputStream imageStream = new ByteArrayInputStream(baf.toByteArray());
Bitmap theImage = BitmapFactory.decodeStream(imageStream);
img.setImageBitmap(theImage);
У меня была такая же проблема, но в моем случае проблема была ресурсов (изображения). Убедитесь, что изображение не находится в цветовом режиме CMYK, так как Android не поддерживает изображения CMYK. См.этот вопрос для более подробной информации
удачи ;)
BufferedInputStream необходим перед decodestream....
попробуйте это работает идеально подходит для меня;
BufferedInputStream buf = new BufferedInputStream(inputsteam, 1024);
Pass buf для декодирования потока он будет работать отлично.
Bitmap theImage = BitmapFactory.decodeStream(buf);
наконец, установите растровое изображение.