1

my code did work before Lollipop update. But now, since lollipop recycle bitmap by itself my app crashes and I take this error;

Process: com.package.example, PID: 16356
    java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.isRecycled()' on a null object reference
            at android.graphics.Canvas.throwIfCannotDraw(Canvas.java:1224)
            at android.graphics.Canvas.drawBitmap(Canvas.java:1280)
            at com.kafyazilim.cocacola.Fragment.TopluFragment.getWholeListViewItemsToBitmap(TopluFragment.java:87)
            at com.kafyazilim.cocacola.Fragment.TopluFragment$1.onClick(TopluFragment.java:114)
            at android.view.View.performClick(View.java:5156)
            at android.view.View$PerformClick.run(View.java:20755)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:145)
            at android.app.ActivityThread.main(ActivityThread.java:5832)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

and this is my code:

public static Bitmap getWholeListViewItemsToBitmap(ListView listview, Activity activity)
    {
        Bitmap bmp;
        ListAdapter adapter  = listview.getAdapter();
        int itemscount       = adapter.getCount();
        int allitemsheight   = 0;
        List<Bitmap> bmps    = new ArrayList<Bitmap>();
        for (int i = 0; i < itemscount; i++) {
            View childView      = adapter.getView(i, null, listview);
            childView.measure(View.MeasureSpec.makeMeasureSpec(listview.getWidth(), View.MeasureSpec.EXACTLY),
                    View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
            childView.layout(0, 0, childView.getMeasuredWidth(), childView.getMeasuredHeight());
            childView.setDrawingCacheEnabled(true);
            childView.buildDrawingCache();
            bmps.add(childView.getDrawingCache());

            allitemsheight+=childView.getMeasuredHeight();
        }
        Bitmap bigbitmap    = Bitmap.createBitmap(listview.getMeasuredWidth(), allitemsheight, Bitmap.Config.ARGB_8888);
        Canvas bigcanvas    = new Canvas(bigbitmap);
        Paint paint = new Paint();
        int iHeight = 0;
        for (int i = 0; i < bmps.size(); i++) {
            bmp = bmps.get(i);
            bigcanvas.drawBitmap(bmp, 0, iHeight, paint);
            iHeight+=bmp.getHeight();


            bmp.recycle();
            bmp = null;

        }
        return bigbitmap;
    }

What can I do to solve this issue ? Thanks for advice.

Dauezevy
  • 1,012
  • 4
  • 22
  • 46

0 Answers0