2017-03-09 4 views
1

Ich habe eine App erstellt in CodenameOne läuft auf Android, die NullPinterExpections wirft nach dem Versuch, zu viele Bilder zu skalieren. Ich habe CacheMap verwendet, um die Situation zu verbessern, bekomme aber immer noch das Problem, nachdem ich zu viele Bilder geladen habe.NullPointer auf Bitmap.getWidth in Codenameone Android App

meinen Code Hier ist das das Problem löst, aus InfiniteContainer fetchComponents

Image i = (Image) MoveService.getInstance().getImage(thumbnail_url); 
     if (i == null) { 
      i = theme.getImage(move.getThumbnail_url()); 
      if (i != null) { 
       i = i.fill(width+20, (width/2) * 3); 
       MoveService.getInstance().putImage(move.getThumbnail_url(), i); 
      } 
     } 

Und hier ist das, was ich aus den Protokollen erhalten:

[EDT] 0:8:57,596 - Exception: java.lang.NullPointerException - Attempt to  invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference 
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference 
    at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:748) 
    at com.codename1.impl.android.c.a(AndroidImplementation.java:1688) 
    at com.codename1.k.s.c(Image.java:1008) 
    at com.codename1.k.s.c_(Image.java:954) 
    at com.codename1.k.s.b(Image.java:919) 
    at com.codename1.impl.android.c$8.a(AndroidImplementation.java:6216) 
    at com.codename1.k.n.a(EncodedImage.java:627) 
    at com.codename1.k.n.b(EncodedImage.java:654) 
    at com.codename1.k.s.e(Image.java:903) 
    at com.codename1.k.s.f(Image.java:974) 
    at com.altitude.studios.polebible.e$b.<init>(Unknown Source) 
    at com.altitude.studios.polebible.e$16.a(Unknown Source) 
    at com.codename1.k.u.m(InfiniteContainer.java:143) 
    at com.codename1.k.u$5.run(InfiniteContainer.java:172) 
    at com.codename1.k.m.l(Display.java:1154) 
    at com.codename1.k.m.j(Display.java:1098) 
    at com.codename1.k.m.i(Display.java:999) 
    at com.codename1.k.ad.run(RunnableWrapper.java:120) 
    at com.codename1.impl.b$1.run(CodenameOneThread.java:60) 
    at java.lang.Thread.run(Thread.java:818) 

Antwort

0

Dies kann passieren, wenn ein Bild durch das ging falsche Pipeline und das zugrundeliegende native Image ist weg. Wenn das Bild ein Schriftbild oder ein ähnliches "exotisches" Bild ist, versuchen Sie, es in ein normales Bild zu konvertieren, indem Sie toEncodedImage() oder eine ähnliche Methode verwenden.

Es kann auch passieren, wenn Sie explizit dispose() auf ein Bild aufgerufen haben.