简体   繁体   中英

out of memory exception

I am new to android. I am doing image listing form sd-card.Following code give me error "Out of memory on a 614416-byte allocation."

public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater layoutInflater = (LayoutInflater) ctx
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = layoutInflater.inflate(R.layout.ll_sponsor_list_item,
                parent, false);

        final ImageView img = (ImageView) convertView
                .findViewById(R.id.imggrid_item_image);
        String imgurl = ImageName.get(position);

        AsyncImageLoaderv asyncImageLoaderv = new AsyncImageLoaderv();
        Bitmap cachedImage = asyncImageLoaderv.loadDrawable(imgurl,
                new AsyncImageLoaderv.ImageCallback() {
                    public void imageLoaded(Bitmap imageDrawable,
                            String imageUrl) {
                        img.setImageBitmap(imageDrawable);


                    }
                });
        img.setImageBitmap(cachedImage);
        cachedImage.recycle();
        return convertView;
    }

Class:

class AsyncImageLoaderv  {
    int width;
    int height;
    float aspectRatio;
    int newWidth;
    int newHeight;

    public Bitmap loadDrawable(final String imageUrl,
            final ImageCallback imageCallback) {
        final Handler handler = new Handler() {
            @Override
            public void handleMessage(Message message) {
                imageCallback.imageLoaded((Bitmap) message.obj, imageUrl);
            }
        };
        new Thread() {
            @Override
            public void run() {
                try {
                    Log.d("ur", imageUrl);
                    Bitmap drawable = BitmapFactory.decodeFile(imageUrl);
                    width = drawable.getWidth();
                    height = drawable.getWidth();
                    aspectRatio = (float) width / (float) height;
                    newWidth = 98;
                    newHeight = (int) (98 / aspectRatio);
                    Bitmap.createScaledBitmap(drawable, newWidth, newHeight,
                            true);
                    Message message = handler.obtainMessage(0, drawable);
                    handler.sendMessage(message);
                    //this.sleep(1000);

                } catch (Exception e) {
                    Log.e("thread stellent", e.toString());
                }
            }
        }.start();
        return null;
    }

    public interface ImageCallback {
        public void imageLoaded(Bitmap imageBitmap, String imageUrl);
    }
}

As I answered in that question:

Android - Outofmemory error by decodefile or decodeStream to convert the Uri selected to bitmap

Bitmaps can not hold heavyweight pictures. Read this post, it is possible to reduce size of images.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM