0

I am trying to display 6 images, which i have kept in res/drawable folder in the gridview.

but i get the following error

10-29 09:44:20.025: E/AndroidRuntime(1549): FATAL EXCEPTION: main
10-29 09:44:20.025: E/AndroidRuntime(1549): java.lang.OutOfMemoryError
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:501)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:354)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:785)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.content.res.Resources.loadDrawable(Resources.java:1965)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.content.res.Resources.getDrawable(Resources.java:660)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.widget.ImageView.resolveUri(ImageView.java:616)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.widget.ImageView.setImageResource(ImageView.java:349)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at com.shiva.bajarangi.ImageAdapter.getView(ImageAdapter.java:55)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.widget.AbsListView.obtainView(AbsListView.java:2159)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.widget.GridView.makeAndAddView(GridView.java:1341)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.widget.GridView.makeRow(GridView.java:341)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.widget.GridView.fillDown(GridView.java:283)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.widget.GridView.fillFromTop(GridView.java:417)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.widget.GridView.layoutChildren(GridView.java:1229)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.widget.AbsListView.onLayout(AbsListView.java:1994)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.view.View.layout(View.java:14008)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.view.ViewGroup.layout(ViewGroup.java:4373)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.view.View.layout(View.java:14008)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.view.ViewGroup.layout(ViewGroup.java:4373)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.view.View.layout(View.java:14008)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.view.ViewGroup.layout(ViewGroup.java:4373)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.view.View.layout(View.java:14008)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.view.ViewGroup.layout(ViewGroup.java:4373)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.view.View.layout(View.java:14008)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.view.ViewGroup.layout(ViewGroup.java:4373)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1892)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1711)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.view.Choreographer.doCallbacks(Choreographer.java:562)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.view.Choreographer.doFrame(Choreographer.java:532)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.os.Handler.handleCallback(Handler.java:725)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.os.Handler.dispatchMessage(Handler.java:92)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.os.Looper.loop(Looper.java:137)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at android.app.ActivityThread.main(ActivityThread.java:5041)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at java.lang.reflect.Method.invokeNative(Native Method)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at java.lang.reflect.Method.invoke(Method.java:511)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
10-29 09:44:20.025: E/AndroidRuntime(1549):     at dalvik.system.NativeStart.main(Native Method)

This is my adapter class

public class ImageAdapter extends BaseAdapter {
    Context mcontext;
    Integer Imageid[] = new Integer[] { R.drawable.image1, R.drawable.image3,
            R.drawable.image4, R.drawable.image5, R.drawable.image6,
            R.drawable.image2 };



    public ImageAdapter(Context context) {
        // TODO Auto-generated constructor stub
        super();
        this.mcontext = context;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return Imageid.length;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub

        LayoutInflater inflater = (LayoutInflater) mcontext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View gridView;
        if(convertView == null){
            gridView = new View(mcontext);

            gridView = inflater.inflate(R.layout.imageview,null);

            ImageView imageView =(ImageView)gridView.findViewById(R.id.imageView);
            imageView.setImageResource(Imageid[position]);
        }
            else {
                gridView = (View) convertView;
            }


        return gridView;
    }

}

why is this error?..

Thanks in advance:)

7
  • how large are your images? Commented Oct 29, 2013 at 9:51
  • @A.S. 135kb,190kb,73.7kb,154kb,268kb and 500kb. are the image sizes of each image Commented Oct 29, 2013 at 9:54
  • 1
    load scaled down images into GridView as original images are consuming a lot memory Commented Oct 29, 2013 at 9:57
  • @GopalRao can you please explain how to load the scaled images??.. thanks:) Commented Oct 29, 2013 at 9:58
  • see johntheripp3r answer... Commented Oct 29, 2013 at 9:59

3 Answers 3

5

What is Happening here is that,,, the app is going out of heap size.So you have to decode the image in such a way that it will fall under the heap size.Do this code in your adapter

 @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub

        LayoutInflater inflater = (LayoutInflater) mcontext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View gridView;
        if(convertView == null){
            gridView = new View(mcontext);

            gridView = inflater.inflate(R.layout.imageview,null);
            ImageView imageView =(ImageView)gridView.findViewById(R.id.imageView);

            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inDither = false;
            options.inJustDecodeBounds = false;
            options.inPreferredConfig = Bitmap.Config.ARGB_8888;
            options.inSampleSize = 3;
            options.inPurgeable = true;

            Bitmap icon = BitmapFactory.decodeResource(context.getResources(),
                    Imageid[position],options);


            holder.imageView.setImageBitmap(icon);
        }
            else {
                gridView = (View) convertView;
            }


        return gridView;
    }
Sign up to request clarification or add additional context in comments.

3 Comments

great answer i am also having for same issue but now solve thank you @Akhilesh Sk
i needed to make small changes in your code.. and it worked for me.. thanks:)
Using "options" to decodeFile realy helps to me, thank you!
0

The images you are using are big.
Have a look at this article
OR
Scale your images down. - reduce their size and quality.

Comments

0

Try reducing the size of your images according to the individual grid sizes. Check the link. How to resize Image in Android?

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.