decodeStream returns null

android, android-image, bitmap

Solution

The problem was that once you've used an InputStream from a HttpUrlConnection, you can't rewind and use the same InputStream again. Therefore you have to create a new InputStream for the actual sampling of the image. Otherwise we have to abort the http request.

request.abort();

Problem

I'm trying to adopt bitmap resizing tutorial - the only difference is that I use decodeStream instead of decodeResource. It's strange but decodeStream, without any manipulations, gives me a bitmap obj, but when I go through decodeSampledBitmapFromStream it returns null for some reason. How do I fix it ? Here's the code I use: ``` protected Handler _onPromoBlocksLoad = new Handler() { @Override public void dispatchMessage(Message msg) { PromoBlocksContainer c = (PromoBlocksContainer) _promoBlocksFactory.getResponse(); HttpRequest request = new HttpRequest(c.getPromoBlocks().get(0).getSmallThumbnail()); BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; InputStream stream; ImageView v = (ImageView) findViewById(R.id.banner); try { stream = request.getStream(); //v.setImageBitmap(BitmapFactory.decodeStream(stream)); Works fine Bitmap img = decodeSampledBitmapFromStream(stream, v.getWidth(), v.getHeight()); v.setImageBitmap(img); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }; public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) { final int height = options.outHeight; final int width = options.outWidth; int inSampleSize = 1; if (height > reqHeight || width > reqWidth) { if (width > height) { inSampleSize = Math.round((float)height / (float)reqHeight); } else { inSampleSize = Math.round((float)width / (float)reqWidth); } } return inSampleSize; } public static Bitmap decodeSampledBitmapFromStream(InputStream res, int reqWidth, int reqHeight) { BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeStream(res, null, options); options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); options.inJustDecodeBounds = false; Bitmap img = BitmapFactory.decodeStream(res, null, options); // Gives null return img; } ```

Original source