Search code examples
blackberrylistfield

Blackberry: Images disappearing from custom drawListRow


I've managed to get images into a custom drawListRow:

public void drawListRow(ListField listField, Graphics graphics, int index, int y, int width) {
     graphics.drawBitmap(0, (index) * listField.getRowHeight(), firstrowPostion, rowHeight, thing.image, 0, 0);
     graphics.setFont(titleFont);
     graphics.drawText(thing.title, firstrowPostion, y, (DrawStyle.LEFT | DrawStyle.ELLIPSIS | DrawStyle.TOP ),  250);
}

The first time though everything works perfectly but once I get to the bottom of the list and start to scroll up again, the pictures have disappeared. Any suggestions?

Edit: I've figured out the second time through this code:

try {
        InputStream inputStream = Connector.openInputStream(ImagePath);

        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        int i = 0;
        while ((i = inputStream.read()) != -1) {
            outputStream.write(i);
        }

        byte[] data = outputStream.toByteArray();
        EncodedImage eimg = EncodedImage.createEncodedImage(data, 0,
                data.length);
        Bitmap image = eimg.getBitmap();
        inputStream.close();
        outputStream.close();

        return ImageUtility.resizeBitmap(image, 70, 70);
    } catch (IOException e) {
        return null;
    } catch (IllegalArgumentException ex) {
        return null;
    }
}

that InputStream inputStream = Connector.openInputStream(ImagePath); is throwing an IOException. I understand from here that IO will be thrown under these conditions: but I don't know which is the cause: 1. more than one openInputStream() on single instance of fileconnection. 2. openInputStream() on already closed fileconnection. 3. openInputStream() on a directory.

again any suggestions?


Solution

  • I figured out it's best to just create a separate array of fully formed images and send both that and the thing array to drawlistrow, instead of trying to form and draw them as every row is drawn.