2013-01-05 150 views
0

我是android新手。我正在做图像清单形式的SD卡。以下代码给我错误“614416字节分配的内存不足。”内存不足异常

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 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); 
    } 
} 
+0

检查图像是否沉重......此错误表明您正在尝试加载沉重的图像。 – AndroidLearner

+0

您正在将图像加载到内存中,然后对其进行缩放。你应该使用'inSampleSize'来缩放它。有很多重复的问题显示如何解决这个问题。和android文档。 – Doomsknight

回答