0

In my Application im loading images from sd card almost 40 to 50 images in grid view for this i created adapter in which constructor loads images from sd card to global variable of array list of bitmaps with in get view im returning bitmap from array list the problem is from this activity user will move to other activity where he will delete image after deletion user will come back to grid activity and have to load the adapter again this creates "bitmap exceeds vm budget". so i don't know is this way to load images from sd card is there any better approach for that any libraries available for loading images from sd card with out memory leak

public class PicAdapter extends BaseAdapter {


    int defaultItemBackground;


    private Context galleryContext;


    Bitmap placeholder;


    public PicAdapter(Context c) {

        // instantiate context
        galleryContext = c;

        // create bitmap array
        bitmaplist=new ArrayList<Bitmap>();
        GlobalData.imageBitmaps = new WeakReference<ArrayList<Bitmap>>(bitmaplist);
        imageDescription = new ArrayList<String>();
        imagetitle = new ArrayList<String>();


        picturesCursor.moveToFirst();
        int i = 0;
        for (i = 0; i < picturesCursor.getCount(); i++) {



            String imagepath = picturesCursor.getString(picturesCursor
                    .getColumnIndex("img"));
            File cacheimage=new File(imagepath);

            if(!cacheimage.exists())
            {
                dBopenHelper.deleteHappyMoments(imagepath);

            }
            else
            {
            Bitmap bitmap = 
                    ViewUtils.decodeSampledBitmapFromResource(imagepath,
                            AppConstants.FRAME_WIDTH,
                            AppConstants.FRAME_HEIGHT);

            ViewUtils.recycleBitmapFrame();
            GlobalData.imageBitmaps.get().add(bitmap);
            imageDescription.add(picturesCursor.getString(picturesCursor
                    .getColumnIndex("image_description")));
            imagetitle.add(picturesCursor.getString(picturesCursor
                    .getColumnIndex("image_title")));
            picturesCursor.moveToNext();
            }

        }



        if (i == picturesCursor.getCount()) {


            Bitmap bitmap = (Bitmap) BitmapFactory.decodeResource(getResources(), R.drawable.add_new);
            GlobalData.imageBitmaps.get().add(bitmap);
            imageDescription.add(
                    "Click Add to new Pictures..............");
        }

        // get the styling attributes - use default Andorid system resources

    }

    // BaseAdapter methods

    // return number of data items i.e. bitmap images
    public int getCount() {

        return bitmaplist.size();
    }

    // return item at specified position
    public Object getItem(int position) {
        return position;
    }

    // return item ID at specified position
    public long getItemId(int position) {
        return position;
    }


    public View getView(int position, View convertView, ViewGroup parent) {

        if (convertView == null) {
            convertView = (ImageView) getLayoutInflater().inflate(
                    R.layout.item_grid_image, null);

            convertView.setLayoutParams(new GridView.LayoutParams(
                    AppConstants.FRAME_WIDTH, AppConstants.FRAME_HEIGHT));


        }
        galleryImageView = (ImageView) convertView;


        galleryImageView.setImageBitmap(GlobalData.imageBitmaps.get().get(position));

    public void addPic(Bitmap newPic) {
        // set at currently selected index
        GlobalData.imageBitmaps.get().add(currentPic, newPic);
    }

    // return bitmap at specified position for larger display
    public Bitmap getPic(int posn) {
        // return bitmap at posn index
        return GlobalData.imageBitmaps.get().get(posn);
    }
}

sample code helps me alot

thanks in advance

Manju
  • 720
  • 9
  • 23

1 Answers1

0
  1. If your images have high dimension- you need to display them one by one using some kind of queue.
  2. Make sure that you decode them correctly.
pvllnspk
  • 5,667
  • 12
  • 59
  • 97
  • thanks for reply but im very new to manage this bitmaps can you explain me how to display them one by ine using queue do you have any sample code or links for this – Manju Dec 07 '12 at 05:50