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 :

[LayoutInflater] Out of memory


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 385
    Par défaut [LayoutInflater] Out of memory
    Bonjour ,

    Me voici encore confronté à un souci .. !
    Suite à mon précédent topic : [ListView] Adapater / NullPointerException , page 2 , on ma conseiller une technique pour afficher les enregistrements par paquet (10 à 10 etc ... ) avec un bouton de suite . !

    J'ai donc déduit qu'on parlais d'un LayoutInflater, j'ai donc créer mes expandableList...

    Bon maintenant le cœur du sujet :
    1 - Cela marche quand je le fait de manière STATIQUE ! Avec une chaine de string...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public ExpandableAdapterBis(Context _context, String[] _array, int _pagination) {
    		mArray=_array;
            mContext=_context;
            pagination=_pagination;
            current_page=1;
            mInflater =LayoutInflater.from(_context);
    	};
    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
    private String[] mArray=new String[] {
        	    "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
        	    "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina",
        	    "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan",
        	    "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium",
        	    "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia",
        	    "Bosnia and Herzegovina", "Botswana", "Bouvet Island", "Brazil", "British Indian Ocean Territory",
        	    "British Virgin Islands", "Brunei", "Bulgaria", "Burkina Faso", "Burundi",
        	    "Cote d'Ivoire", "Cambodia", "Cameroon", "Canada", "Cape Verde",
        	    "Cayman Islands", "Central African Republic", "Chad", "Chile", "China",
        	    "Christmas Island", "Cocos (Keeling) Islands", "Colombia", "Comoros", "Congo",
        	    "Cook Islands", "Costa Rica", "Croatia", "Cuba"
        	  };	
    @Override
    	 public void onCreate(Bundle savedInstanceState) {
    	        super.onCreate(savedInstanceState);
    	        setContentView(R.layout.second);
     
    	        mListView=(ListView)findViewById(R.id.listView1);
    	        mExpandableAdapter = new ExpandableAdapterBis(this, mArray, 11);
    	        mListView.setAdapter(mExpandableAdapter);
    2 - L'adaptation de mon Arraylist dans celui ci ne marche pas ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	public ExpandableAdapterBis(Context _context, ArrayList<String> personnes,
    			int _pagination) {
    		// TODO Auto-generated constructor stub
    		mContext=_context;
            pagination=_pagination;
            current_page=1;
            mInflater =LayoutInflater.from(_context);
    	}
    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
    	 public void onCreate(Bundle savedInstanceState) {
    	        super.onCreate(savedInstanceState);
    	        setContentView(R.layout.second);
     
    	        /*mListView=(ListView)findViewById(R.id.listView1);
    	        mExpandableAdapter = new ExpandableAdapterBis(this, mArray, 11);
    	        mListView.setAdapter(mExpandableAdapter);*/
     
     
     
    	        DatabaseHelper dbh;
    			try {
    				dbh = new DatabaseHelper(this.getApplicationContext()); 
    mListView=(ListView)findViewById(R.id.listView1);
    mExpandableAdapter = new ExpandableAdapterBis(this,dbh.getPersonnes(), 11);
    mListView.setAdapter(mExpandableAdapter);
     
    			} catch (IOException e) {
    				e.printStackTrace();
    			}

    Merci à vous ,
    Toujours des topics à ce tirer les cheveux...

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut
    Le fait que dans le constructeur de ExpandableAdapterBis il n'y ait pas de référence à ton ArrayList<String> personnes est dû à une faute de frappe (sinon, c'est normal que ça ne fonctionne pas...).

    Sinon, qu'entends-tu exactement par "ça ne marche pas" ? L'appli plante ? Elle affiche n'importe quoi ? Il ne se passe rien ?

    Mako.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 385
    Par défaut
    mon getPersonnes() ce trouve dans mon DatabaseHelper.

    Pour "ça ne marche pas" , oui j'ai oublier de redire , mais cela est dans le titre : J'ai un "Out of memory on a 1191496-byte allocation" ce qui m'indique que mes processus doivent dépasser les 24MB :S ! (encore ... )

    Je travail sur une table de 33k enregistrement sur 5colonnes.

    Pour mon getPersonnes() , ce trouvant dans mon DatabaseHelper le voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public ArrayList<String> getPersonnes() {
        ArrayList<String> output = new ArrayList<String>();
        String[] colonnesARecup = new String[] { "nom", "prenom" };
        Cursor cursorResults = mydb.query(TABLE_LISTELEC, colonnesARecup, null,
                null, null, null, "nom asc, prenom asc", null);
    	while (cursorResults.moveToFirst())
    	{
    		output.add(cursorResults.getString(0) + " " + cursorResults.getString(1));
    	}				
        return output;
    }
    L'erreur complète :

    Out of memory on a 1191496-byte allocation
    ......
    ......
    FATAL EXCEPTION : main
    java.lang.OutOfMemoryError
    at com.listexpendable.DatabaseHelper.getPersonnes(DatabaseHelper.java:150)
    com.listexpendable.List.onCreate(List.java:45)
    La ligne : (DatabaseHelper.java:150), correspond à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    output.add(cursorResults.getString(0) + " " + cursorResults.getString(1));
    La ligne : (List.java:45), correspond à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mListView.setAdapter(mExpandableAdapter);
    et oui au final elle plante... avec le classique sorry etc !

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut
    De base, vu la tête de l'erreur, je dirais que la volumétrie de résultats est trop importante. Peut-être que cela vient de la requête effectué, et du volume de résultat obtenu (et j'insiste sur le peut-être...).

    Il faudrait sans doute essayer d'en savoir un peu plus en ajoutant des logs (nombre d'itérations avec plantage entre autres).

    Sinon, désolé, je n'ai pas plus d'idées.

    Mako.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 385
    Par défaut
    Oui le volume total à traiter est très important et c'est pour cela que je ne peu le traiter dans une listView classique , normalement un LayoutInflater sert à faire les appel par bloque de demande (ici 10 par 10) , ce qui me semblais être la technique la plus adéquate pour pouvoir quand même afficher mes données ... !

    Merci en tout cas pour ton aide qui a surement permis de mieux éclaircir le problème !

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut
    En l'occurrence, j'ai l'impression que tu vas charger tous tes résultats en une seule fois (requête SQL), mais que l'affichage lui, se fera par bloc. Or actuellement, ce n'est pas au niveau de l'affichage que tu as des soucis de capacité, mais plutôt au niveau de la récupération de tes données.

    Ne serait-il pas possible de les charges par bloc ?

    Mako.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XStream][String]out of memory
    Par Invité dans le forum Persistance des données
    Réponses: 8
    Dernier message: 10/01/2006, 14h52
  2. [C++] [gcc] out of memory
    Par fxp17 dans le forum GCC
    Réponses: 5
    Dernier message: 06/01/2006, 10h29
  3. [pb mémoire] out of memory d'eclipse
    Par Casp dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 12/05/2005, 16h39
  4. Out of memory
    Par shurato dans le forum ANT
    Réponses: 1
    Dernier message: 10/11/2004, 16h19
  5. [JBuilder 8] Out of memory problem ...
    Par keros dans le forum JBuilder
    Réponses: 2
    Dernier message: 08/09/2003, 19h03

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