IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Gestion de la mémoire en remplissant une liste d'images


Sujet :

Android

  1. #1
    Membre à l'essai
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Novembre 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Expert sécurité informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2011
    Messages : 21
    Points : 22
    Points
    22
    Par défaut Gestion de la mémoire en remplissant une liste d'images
    Bonjour, je suis en train de développer une application android dont j'utilise une liste view pour présenter quelque image dedans. mais toujours j'obtiens une exception OutOfMemoryError,

    NB: site.getImage() est de type byte[]

    voila mon code:

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    public class MySiteAdaptor extends ArrayAdapter<NewSite> {
     
    	private Context context;
    	private int layoutResourceId;
    	private List<NewSite> data;
    	private LayoutInflater mInflater;
    	private OnSelectedFromFragment onSelectedFromFragment;
     
    	public MySiteAdaptor(Context context, int layoutResourceId,
    			List<NewSite> data, OnSelectedFromFragment onSelectedFromFragment) {
    		super(context, layoutResourceId, data);
    		this.context = context;
    		this.layoutResourceId = layoutResourceId;
    		this.data = data;
    		this.onSelectedFromFragment = onSelectedFromFragment;
    		mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    	}
     
     
    	@Override
    	public View getView(final int position, View convertView, ViewGroup parent) {
     
    		View row = convertView;
    		SiteHolder holder = null;
    		ImageView view;
    		Bitmap bmp = null;
    		BitmapFactory.Options options = new BitmapFactory.Options();
     
     
    		if (row == null) {
    			LayoutInflater inflater = ((Activity) context).getLayoutInflater();
    			row = mInflater.inflate(layoutResourceId, parent, false);
     
    			holder = new SiteHolder();
    			holder.image = (ImageView) row.findViewById(R.id.imageView_site);
    			holder.informations = (TextView) row.findViewById(R.id.site_information);
    			holder.listOfImages = (LinearLayout) row.findViewById(R.id.sub_site_images);
     
    			row.setTag(holder);
    		} else {
    			holder = (SiteHolder) row.getTag();
    		}
     
    		final NewSite site = data.get(position);
     
    		if(null != site.getImage()){
    			options.inSampleSize = site.getImage().length;
    			Bitmap bmpSite = BitmapFactory.decodeByteArray(site.getImage(), 0, site.getImage().length, options);
    			holder.image.setImageBitmap(bmpSite);
     
    		}
    		if(null != site.getDescription())
    			holder.informations.setText(site.getDescription() + "    " + position);
     
    		try {
     
     
    		if(site.getListOfChildren() != null && site.getListOfChildren().size() != 0){
    			Log.i("BitmapFactory", site.getListOfChildren().size() + " " + position);
    			for (NewSite newSite : site.getListOfChildren()) {
     
     
    				if(null != newSite.getImage()){
    					options.inSampleSize = site.getImage().length;
    					bmp = BitmapFactory.decodeByteArray(newSite.getImage(),0,newSite.getImage().length, options);
     
    					//holder.image.setImageBitmap(bmp);//(site.getImageSite());
    					view = new ImageView(context);
     
    					view.setLayoutParams(new LayoutParams(30, 20));
    					view.setPadding(2, 0, 2, 2);
     
    					view.setImageBitmap(bmp);
     
    					holder.listOfImages.addView(view);
     
    				}
     
    			}
    		}
    		} catch (OutOfMemoryError e) {
    		}
     
    		return row;
    	}
     
    	class SiteHolder {
    		ImageView image;
    		TextView informations;
    		LinearLayout listOfImages;
    	}

    merci d'avance

  2. #2
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Quelle est la taille de tes images, pour rappel la mémoire sur un smartphone n'est pas illimité (la HEAP est pour l'instant a 24 32 ou 64 Mo ). On a commencé par du 16 Mo au début, donc faites bien attention a l'utilisation de la mémoire au sein de vos applications.

    Si l'image est trop volumineuse alors il faut la réduire avant de la télécharger ou de la possitionner dans les assets.

Discussions similaires

  1. [Débutant] Gestion de plage de dates dans une liste
    Par hypo_the_one dans le forum SharePoint
    Réponses: 3
    Dernier message: 03/10/2014, 16h03
  2. Réponses: 0
    Dernier message: 14/11/2010, 14h59
  3. Réponses: 0
    Dernier message: 14/11/2010, 14h58
  4. Gestion des lignes vides avant/après une liste
    Par 84mickael dans le forum Mise en forme
    Réponses: 4
    Dernier message: 28/08/2007, 16h25
  5. Réponses: 4
    Dernier message: 14/10/2003, 08h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo