2016-04-26 4 views
0

Ich versuche, skalierte Bitmap zu erstellen, aber auf wenigen Geräten (nicht alle) bekomme ich diese Ausnahme.Android: java.lang.NullPointerException bei android.graphics.Bitmap.createScaledBitmap (Bitmap.java:490)

Bitmap bit = BitmapFactory.decodeFile(uri); 
Bitmap bitmap1= Bitmap.createScaledBitmap(bit, 50, 50, true); <--- This line causes null pointer 

Der komplette Stacktrace ist unten:

java.lang.NullPointerException 
    at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:490) 
    at com.my.app.adapters.MyAdapter.onBindViewHolder(MyAdapter.java:101) 
    at com.my.app.adapters.MyAdapter.onBindViewHolder(MyAdapter.java:35) 
    at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5217) 
    at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5250) 
    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4487) 
    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4363) 
    at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1961) 
    at android.support.v7.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:458) 
    at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1333) 
    at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:562) 
    at android.support.v7.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:171) 
    at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2900) 
    at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3071) 
    at android.view.View.layout(View.java:14143) 
    at android.view.ViewGroup.layout(ViewGroup.java:4666) 
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655) 
    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513) 
    at android.widget.LinearLayout.onLayout(LinearLayout.java:1426) 
    at android.view.View.layout(View.java:14143) 
    at android.view.ViewGroup.layout(ViewGroup.java:4666) 
    at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
    at android.view.View.layout(View.java:14143) 
    at android.view.ViewGroup.layout(ViewGroup.java:4666) 
    at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
    at android.view.View.layout(View.java:14143) 
    at android.view.ViewGroup.layout(ViewGroup.java:4666) 
    at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
    at android.view.View.layout(View.java:14143) 
    at android.view.ViewGroup.layout(ViewGroup.java:4666) 
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655) 
    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513) 
    at android.widget.LinearLayout.onLayout(LinearLayout.java:1426) 
    at android.view.View.layout(View.java:14143) 
    at android.view.ViewGroup.layout(ViewGroup.java:4666) 
    at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
    at android.view.View.layout(View.java:14143) 
    at android.view.ViewGroup.layout(ViewGroup.java:4666) 
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655) 
    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513) 
    at android.widget.LinearLayout.onLayout(LinearLayout.java:1426) 
    at android.view.View.layout(View.java:14143) 
    at android.view.ViewGroup.layout(ViewGroup.java:4666) 
    at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
    at android.view.View.layout(View.java:14143) 
    at android.view.ViewGroup.layout(ViewGroup.java:4666) 
    at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2024) 
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1845) 
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1138) 
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4645) 
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) 
    at android.view.Choreographer.doCallbacks(Choreographer.java:555) 
    at android.view.Choreographer.doFrame(Choreographer.java:525) 
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) 
    at android.os.Handler.handleCallback(Handler.java:615) 
    at android.os.Handler.dispatchMessage(Handler.java:92) 
    at android.os.Looper.loop(Looper.java:174) 
    at android.app.ActivityThread.main(ActivityThread.java:4952) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794) 
    at dalvik.system.NativeStart.main(Native Method) 

Wenn ich jetzt auf Bitmap.java Linie 490 aussehen, gibt es keinen Code dort. Ich bin mir nicht sicher, wie ich dieses Problem lösen soll. Kann jemand irgendwelche Vorschläge machen, oder wird es noch besser, wenn jemand helfen kann? Danke im Voraus !!

 long bufferSize = (long)elements << shift; 
     long pixelSize = getByteCount(); 
               <-- Line 490 
     if (bufferSize < pixelSize) { 
      throw new RuntimeException("Buffer not large enough for pixels"); 
     } 
+1

Haben Sie verifiziert, dass 'bit' nicht null ist? – dharms

+1

Zunächst kann die BitmapFactory.decodeFile (..) eine Null zurückgeben, wenn sie ein Bild nicht dekodieren kann. Sie sollten dies zuerst überprüfen. –

+0

In Bezug auf diesen fehlenden Code in Zeile 490 könnten Sie auf einem Gerät mit einer anderen API-Version als Ihrem Quellcode bereitstellen –

Antwort

0

von Android Dokumentation:

public static Bitmap decodeFile (String pathName)

Sie den Pfad als String-Objekt in Datei passieren sollte, nicht ein Objekt Uri.

+0

Thnx, aber Variable URI ist eine Zeichenfolge, ich habe es nur zu uri benannt. – varunkr

+0

Dann ist vielleicht die Zeichenfolge, die Sie übergeben, nicht gültig, versuchen Sie, etwas Code einzufügen. –

+0

Thnx, aber ich denke das Problem ist wie @SergioLima darauf hingewiesen. decodeFile kann null zurückgeben, auch ich habe gerade überprüft, ich fange diese Ausnahme überall in meiner App außer diesem einen Teil und es verursachte eine Ausnahme. Das ist wahrscheinlich der Grund. – varunkr

Verwandte Themen