Неизвестно, почему выбрасывается исключение NullPointerException - PullRequest
1 голос
/ 09 октября 2010

Я использую ленивый загрузчик изображений для моего ListView со следующим кодом внутри getView():

Bitmap cachedImage = asyncImageLoader.loadBitmap(item.getImage(), wallpaperNumber, new ImageCallback()
{
    public void imageLoaded(Bitmap bitmapImage, String wallpaperNumber)
    {
        ImageView imageViewByTag = (ImageView) listView.findViewWithTag(wallpaperNumber);
        imageViewByTag.setImageBitmap(bitmapImage);
    }
});

И следующим внутри класса AsyncImageLoader:

public Bitmap loadBitmap(final byte[] image, final String wallpaperNumber, final ImageCallback imageCallback) 
{
    if (imageCache.containsKey(wallpaperNumber)) 
    {
        SoftReference<Bitmap> softReference = imageCache.get(wallpaperNumber);
        Bitmap Bitmap = softReference.get();

        if (Bitmap != null) 
        {
            return Bitmap;
        }
    }
    final Handler handler = new Handler() 
    {
        @Override
        public void handleMessage(Message message) 
        {
            try
            {
                if (message.obj != null)
                {                       
                    imageCallback.imageLoaded((Bitmap) message.obj, wallpaperNumber);
                }
                else
                {
                    Bitmap bitmapImage = loadImage(image);
                    imageCache.put(wallpaperNumber, new SoftReference<Bitmap>(bitmapImage));

                    imageCallback.imageLoaded(bitmapImage, wallpaperNumber);
                }
            } 
            catch (Exception e) 
            {
                MiscFunctions.logStackTrace(e);
            }
        }
    };
    new Thread() 
    {
        @Override
        public void run() 
        {
            Bitmap bitmapImage = loadImage(image);
            imageCache.put(wallpaperNumber, new SoftReference<Bitmap>(bitmapImage));
            Message message = handler.obtainMessage(0, bitmapImage);
            handler.sendMessage(message);
        }
    }.start();
    return null;
}

private static Bitmap loadImage(byte[] image) 
{
    Bitmap bitmapImage = BitmapFactory.decodeByteArray(image, 0, image.length);
    bitmapImage = Bitmap.createScaledBitmap(bitmapImage, imageWidth, imageHeight, true);

    return bitmapImage;
}

public interface ImageCallback 
{
    public void imageLoaded(Bitmap imageBitmap, String wallpaperNumber);
}

По неизвестной мне причине, после того, как я переключился с использования общего SQLiteOpenHelper на пользовательский, который позволяет мне хранить мою базу данных на SD-карте, каждое 6-ое или 7-е загруженное изображение выдает NullPointer по адресу:

imageCallback.imageLoaded((Bitmap) message.obj, wallpaperNumber);

Я проверил все и на самом деле не знаю, какая переменная на самом деле равна нулю.

Любая помощь?

1 Ответ

0 голосов
/ 09 октября 2010

Я проверил все и на самом деле не знаю, какая переменная фактически равна нулю.

Добавьте пару операторов assert, чтобы проверить наличие нуля (из imageCallback, message, message.obj, wallpaperNumber).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...