2011-06-28 170 views
0

爲什麼我得到一個NullpointerException?NullpointerException在畫布上繪製位圖

謝謝!

ps: 我是Java新手。

try { 
     URL uri = new URL("http://static.panoramio.com/photos/original/41455707.jpg"); 
      URLConnection connection = uri.openConnection(); 
      Log.i(TAG, "connecting..."); 
      connection.connect(); 
      InputStream is = connection.getInputStream(); 
      BufferedInputStream bis = new BufferedInputStream(is, 8 * 1024); 
      Bitmap bmp = BitmapFactory.decodeStream(bis); 
      bis.close(); 
      is.close(); 

      Log.i(TAG, "setting bitmap"); 
      //Log.d(TAG, canvas.toString()); 
      //Log.d(TAG, bmp.toString()); 
      canvas.setBitmap(bmp); 
    } catch (Exception exc){ 
     Log.e(TAG, exc.toString()); 
     return; 
    } 

輸出:

06-28 17:29:04.857 391 397 I MyWallpaperPainting: connecting... 
06-28 17:29:07.248 391 397 I MyWallpaperPainting: setting bitmap 
06-28 17:29:07.248 391 397 E MyWallpaperPainting: java.lang.NullPointerException 
+0

好吧,我開始了一個新的代碼庫,我仍然有這個錯誤,現在我發現,如果我使用另一個網址它的工作原理,所以它的位圖導致的問題!但爲什麼? – nomoral

回答

0

我想你沒有初始化畫布對象。

+0

我這麼認爲,至少'canvas.drawColor(0xFFFFFF00);'工作正常。這個代碼是基於http://blog.androgames.net/58/android-live-wallpaper-tutorial/ – nomoral

1

這可能很愚蠢,但您之前是否在某處初始化畫布?

+0

我想是這樣,至少'canvas.drawColor(0xFFFFFF00);'工作正常。此代碼基於http://blog.androgames.net/58/android-live-wallpaper-tutorial/ – nomoral

0

是一個在覆蓋onDraw(畫布畫布)方法?

+0

不,代碼基於http://blog.androgames.net/58/android-live-wallpaper -tutorial/ – nomoral

0

的InputStream是一個抽象類,我不認爲你可以創建它的一個實例,你嘗試過:

的BufferedInputStream雙=新的BufferedInputStream( 新的InputStream(connection.getInputStream()),8 * 1024) ;

+0

這會導致編譯錯誤,不是嗎?實例化抽象類我的意思是。 – MGZero

+0

我有粗心的實例化偷偷通過編譯器,並導致最近一次空指針異常 –

+0

這不是我們在這裏討論的模板類。編譯器知道它是抽象的。 – MGZero

0

我在遊戲開發中並不擅長,但爲什麼不從SurfaceView擴展並實現Surface.CallBack並使用內部AsyncTask類來處理線程?很好的工作! =]