livewallpaper中的android Null指针问题不确定原因

时间:2011-04-27 11:53:01

标签: android nullpointerexception

我正在写一个livewallpaper,它将从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;
                }
            }

我一直在OnVisibilityChanged(可见)方法中获取方法getPic()的NullPointerException,注释为*。

如果需要更多信息,请询问。就像我说我不知道​​为什么它给我这个错误所以有可能它是从我没有包括的代码。 谢谢!

2 个答案:

答案 0 :(得分:1)

哇,那对于一个构造来说呢?

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可以返回null。在这种情况下,您仍然会在空引用上调用getBitmap() ...

答案 1 :(得分:0)

如果发生错误,LoadImageFromWebOperations将返回null。在getPic中,您尝试在LoadImageFromWebOperations的返回值上调用getBitmap() - 如果返回的值为null 你试图在null对象上调用getBitmap(),这将导致你的NPE