我正在写一个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,注释为*。
如果需要更多信息,请询问。就像我说我不知道为什么它给我这个错误所以有可能它是从我没有包括的代码。 谢谢!
答案 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