Андроид пустой указатель проблема в LiveWallpaper не уверены в причине - PullRequest
0 голосов
/ 27 апреля 2011

Я пишу живую бумагу, которая будет извлекать изображения из flickr, делать их фоновыми и менять их так часто. Прямо сейчас я заглушил / проигнорировал / обошел часть flickr, а также игнорирую синхронизированные изменения. Тем не менее, у меня снова и снова появляется одна и та же ошибка нулевого указателя, и я не могу понять, что ее вызывает.

вот несколько методов, связанных с ошибкой

@Override
    public void onVisibilityChanged(boolean visible) {
        mVisible = visible;
        if (visible) {
            setImage(getPic());//***NULLPOINTERERROR
        } else {
            mHandler.removeCallbacks(getFlickrPic);
        }
    }

public void setImage(Bitmap bm)
    {
        final SurfaceHolder holder = getSurfaceHolder();
        Canvas c= null;
        try{
            c=holder.lockCanvas();
            if (c != null) {
                c.setBitmap(bm);
            }
        } finally { if (c != null) holder.unlockCanvasAndPost(c); }
    }

    public Bitmap getPic()
    {
        Bitmap bm = null;

        bm = ((BitmapDrawable) LoadImageFromWebOperations("http://farm6.static.flickr.com/5102/5655314644_b7038a5438_z.jpg")).getBitmap();
        while (bm==null)
        {bm = ((BitmapDrawable) getResources().getDrawable(R.drawable.no)).getBitmap();}

        return bm;
        }

    private Drawable LoadImageFromWebOperations(String url)
           {
                try
                {
                    InputStream is = (InputStream) new URL(url).openStream();
                    Drawable d = Drawable.createFromStream(is, "src name");
                    return d;
                }catch (Exception e) {
                    System.out.println("Exc="+e);
                    return null;
                }
            }

Я получаю исключение NullPointerException для метода getPic () в методе OnVisibilityChanged (visible), отмеченном * комментарием.

Если вам нужна дополнительная информация, пожалуйста, спросите. Как я уже сказал, я не знаю, почему это дает мне эту ошибку, поэтому есть вероятность, что это что-то из кода, который я не включил. спасибо!

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

Ух ты, что за конструкция?

while (bm==null) {
    bm = ((BitmapDrawable) getResources().getDrawable(R.drawable.no)).getBitmap();
}

Это выглядит злым ...

В любом случае, ваша проблема в следующей строке:

bm = ((BitmapDrawable) LoadImageFromWebOperations("http://farm6.static.flickr.com/5102/5655314644_b7038a5438_z.jpg")).getBitmap()

LoadImageFromWebOperations может вернуть ноль. В этом случае вы по-прежнему вызываете getBitmap() по нулевой ссылке ...

0 голосов
/ 27 апреля 2011

LoadImageFromWebOperations возвращает ноль, если произошла ошибка. в getPic вы пытаетесь вызвать getBitmap () для возвращаемого значения LoadImageFromWebOperations - если возвращаемое значение равно нулю вы пытаетесь вызвать getBitmap () для нулевого объекта, что вызовет ваш NPE

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