2011-06-28 5 views
0

Pourquoi est-ce que j'obtiens une exception NullpointerException?NullpointerException dessin bitmap sur le canevas

Merci!

ps: Je suis nouveau à 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; 
    } 

la sortie:

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

ok, j'ai commencé avec une nouvelle base de code et j'ai toujours eu cette erreur, maintenant j'ai découvert que si j'utilise une autre URL cela fonctionne, donc c'est le bitmap qui cause le problème! mais pourquoi? – nomoral

Répondre

0

Je pense que vous ne l'avez pas initialiser l'objet de toile.

+0

Je pense, au moins 'canvas.drawColor (0xFFFFFF00);' fonctionne bien. ce code est basé sur http://blog.androgames.net/58/android-live-wallpaper-tutorial/ – nomoral

1

Cela peut être idiot mais avez-vous initialisé la toile quelque part précédemment?

+0

je pense, au moins 'canvas.drawColor (0xFFFFFF00);' fonctionne très bien. ce code est basé sur http://blog.androgames.net/58/android-live-wallpaper-tutorial/ – nomoral

0

est-ce dans la méthode onDraw (Canvas canvas) surchargée?

+0

non, le code est basé sur http://blog.androgames.net/58/android-live-wallpaper -tutorial/ – nomoral

0

InputStream est une classe abstraite, je ne pense pas que vous pouvez créer une instance de celui-ci, avez-vous essayé:

BufferedInputStream bis = new BufferedInputStream ( nouvelle InputStream (connection.getInputStream()), 8 * 1024) ;

+0

Cela provoquerait une erreur de compilation, non? Instancier une classe abstraite je veux dire. – MGZero

+0

J'ai eu des instantiations imprudentes qui se faufilent devant le compilateur et provoquent des exceptions de pointeur nul aussi récemment que la semaine dernière. –

+0

Ce n'est pas une classe modèle dont nous parlons ici. Le compilateur sait que c'est abstrait. – MGZero

0

Je ne suis pas très bon en développement de jeu, mais pourquoi ne pas étendre SurfaceView et implémenter Surface.CallBack et utiliser la classe interne AsyncTask pour gérer les threads? Fait le travail bien! =]

Questions connexes