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 :

Erreur : "Grow heap (frag case) to X mb"


Sujet :

Android

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut Erreur : "Grow heap (frag case) to X mb"
    Bonjour,

    Je rencontre dans mon application l'erreur
    Grow heap (frag case) to X mb
    et je ne sais pas quel est le problème dans mon code.

    Elle survient lorsque je récupère des pages HTML et que je les transforme en String.
    Voici le code :
    Code : 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
    import android.util.Log;
     
    public class Connection 
    {
        private static HttpClient client = null;
     
        public Connection()
        {
            if (client == null)
            {
                HttpParams parameters = new BasicHttpParams();
     
                ConnManagerParams.setMaxTotalConnections(parameters, 100);
     
                SchemeRegistry schReg = new SchemeRegistry();
                schReg.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
     
                ClientConnectionManager conMgr = new ThreadSafeClientConnManager(parameters, schReg);
     
                client = new DefaultHttpClient(conMgr, parameters);
            }
        }
     
        public  String executeGet(String site)
        {
            Log.w("get",site);
            try 
            {
                HttpGet get = new HttpGet(site);
                HttpResponse rep = client.execute(get);
                HttpEntity entity = rep.getEntity();
                return (Tools.streamToString(entity.getContent()));
            } 
            catch (ClientProtocolException e) 
            {
                e.printStackTrace();
            } 
            catch (IOException e) 
            {
                e.printStackTrace();
            }
            return ("");
        }
     
        public synchronized InputStream executeGetImage(String site)
        {
            try 
            {
                Log.w("connect", "debut #"+ site + "#");
                HttpGet get = new HttpGet(site);
     
                Log.w("Connect", "milieu");
                HttpResponse rep = client.execute(get);
     
                Log.w("connect", "fin");
                HttpEntity entity = rep.getEntity();
     
                BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);
     
                InputStream instream = bufHttpEntity.getContent();
     
                return (instream);
            } 
            catch (ClientProtocolException e) 
            {
                e.printStackTrace();
            } 
            catch (IOException e) 
            {
                e.printStackTrace();
            }
            return (null);
        }
     
        public void close()
        {        
            client.getConnectionManager().shutdown();
            client = null;
        }
    }
    La fonction qui convertis l'inputStream en string que j'appelle par la suite :
    Code : 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
        public static String streamToString(InputStream stream)
        {
            StringBuilder sb = new StringBuilder();
            String line = null;
            try
            {
                InputStreamReader isr = new InputStreamReader(stream);
                BufferedReader reader = new BufferedReader(isr, 8 * 1024);
                while ((line = reader.readLine()) != null) {
                    sb.append(line).append("\n");
                }
                return sb.toString();
            }
            catch(IOException exc)
            {
                return (null);
            }
        }
    Je précise que ça arrive au bout du troisième/quatrième appel a executeGet.

    Je sais que je dépasse la mémoire que le téléphone donne à mon application mais normalement je ne devrais pas.
    Je récupère une toute petite page HTML de quelques Ko.

    Quelqu'un saurait-il m'expliquer d'où peut venir le problème ?

    Merci d'avance pour votre aide.

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut
    Re bonjour,

    Je viens de trouver mon problème : je télécharge et stock des images dans une liste de Bitmaps et apparemment android n'aime pas ça.
    Je me demande quel est le choix le plus judicieux à faire maintenant:
    - Télécharger l'image à chaque fois ? Je ne trouve pas ça optimal.
    - Stocker les images sur le téléphone avec la mémoire prive réservé à mon application ?
    - Stocker les images sur une carte SD ?
    - Autre ?

    Merci d'avance pour votre aide.

    Edit : Désolé Laurent.B pour t'avoir obligé à éditer mon sujet

  3. #3
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Salut
    Citation Envoyé par Sake_reflex Voir le message
    - Stocker les images sur le téléphone avec la mémoire prive réservé à mon application ?
    Regarde les WeakReference et WeakHashMap
    http://developer.android.com/referen...Reference.html
    http://developer.android.com/referen...akHashMap.html

Discussions similaires

  1. Erreur "OutOfMemoryError: Java heap space"
    Par mouss4rs dans le forum Eclipse Java
    Réponses: 7
    Dernier message: 06/03/2012, 19h31
  2. Page d'erreur 404 avec switch et case
    Par Olivier Regnier dans le forum Langage
    Réponses: 6
    Dernier message: 24/07/2009, 09h56
  3. erreur java : java heap space
    Par bdptaki dans le forum NetBeans
    Réponses: 8
    Dernier message: 24/04/2009, 17h15
  4. Erreur sql, mauvais emploi de 'case' dans sql ?
    Par gapse dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/12/2008, 10h04

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