2013-01-05 2 views
0

Je suis nouveau sur android. Je fais le formulaire de fiche d'image sd-card.Following code me donner l'erreur "Mémoire insuffisante sur une allocation de 614416 octets."hors de l'exception de la mémoire

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; 
    } 

Classe:

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

vérifiez que les images sont lourdes ou pas ... Cette erreur indique que vous essayez de charger une image lourde. – AndroidLearner

+0

Vous chargez l'image en mémoire, puis redimensionnez-la. Vous devriez le mettre à l'échelle en utilisant 'inSampleSize'. Il y a beaucoup de questions en double montrant comment résoudre ceci. Et la documentation Android. – Doomsknight

Répondre

Questions connexes