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);

наконец, установите растровое изображение.