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 :

Problème de tableaux d'objet


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 22
    Par défaut Problème de tableaux d'objet
    Bonjour à toutes et à tous.

    Je suis actuellement en train de développer une petite Application sur Android pour le boulot et je suis tomber sur un problème je n'arrive vraiment pas à résoudre !

    le principe est simple. Lister les fichiers d'un dossier, les lire, et créer un objet contenant les informations décodé.
    l'application est sous forme de notes. un Nom de note filename - ".txt" et un contenu.

    Le fait est lorsque je remplis mon tableau dans un for tous fonctionne bien. Mais dès que je sors de mon for. les tableau est aussitôt remplis avec la dernière entrée.

    j'ai surement fais une erreur, mais j'ai beau chercher et tester plein de choses. rien de marche

    voici le vilain code résponsable:

    dans le dossier deux fichiers : 1.txt et 2.txt

    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
        /*appel de méthode ->>>*/	afficherNotes(LoadNote());
     
        ////////////////////////////////
        public Note[] LoadNote() throws IOException{
     
        	File[] ListofFile;    	
        	File manager = new File(Environment.getExternalStorageDirectory() + "/Notes/");
        	if (manager.exists()){
        	ListofFile=manager.listFiles();
        	Log.v(TAG,"nombre de fichier: " + ListofFile.length);
        	if(ListofFile.length!=0){
        		NotesArrayAdapter.clear();
        	}
        	Note[] noteArray = new Note[ListofFile.length];
     
        	Log.v(TAG,"Taille noteArray: "+ noteArray.length);
        	Note note = new Note();
        	for (int index = 0; index<ListofFile.length;index++){
        		String filename = ListofFile[index].getName();
        		FileReader inputReader = new FileReader(ListofFile[index]);
        		BufferedReader in = new BufferedReader(inputReader);
        		StringBuffer objBuffer = new StringBuffer();
        		String strLine;
        		while ((strLine = in.readLine()) != null) {
        			objBuffer.append(strLine);
        			objBuffer.append("\n");
        		}
     
        		String content = objBuffer.toString();
        		note.setName(getNoteName(filename));
        		note.setContent(content);
        		note.setFilename(filename);    		
        		noteArray[index]=note;
        		Log.v(TAG,"Nom : "+ noteArray[index].getName());
        		Log.v(TAG,"Index : "+ index);
            	Log.v(TAG,"Test inFor: " + noteArray[index].getName());
     
     
        		/* C'est ici que ça coince noteArray est bien remplit dans le For*/
        		in.close();
     
        	}
                     /*mais il ne l'ait plus ici*/
        	Log.v(TAG,"Test : " + noteArray[0].getName());
        	Log.v(TAG,"Test : " + noteArray[1].getName());
     
        	return noteArray;
     
     
        	}
        	return null;
     
        }
        /*affichage ListView*/
        public void afficherNotes(Note[] noteArray){
        	Log.v(TAG,"Jepasselà");
        	if(noteArray==null){
        		Log.v(TAG,"A plus...");
        	}
        	for(int i = 0; i<noteArray.length;i++){
        		Log.v(TAG,"i :"+i);
        		Log.v(TAG,"Notes Affichées :"+ noteArray[i].getName());
        		NotesArrayAdapter.add(noteArray[i].getName());
     
        	}
        }
     
        public String getNoteName(String filename){
        	String name = filename.substring(0, (filename.length()-4));
    		return name;
        }
    Voici le Log :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    04-16 20:32:35.570: VERBOSE/BlocNotesActivity(9862): Taille noteArray: 2
    04-16 20:32:35.580: VERBOSE/BlocNotesActivity(9862): Nom : 2
    04-16 20:32:35.580: VERBOSE/BlocNotesActivity(9862): Index : 0
    04-16 20:32:35.580: VERBOSE/BlocNotesActivity(9862): Test inFor: 2
    04-16 20:32:35.580: VERBOSE/BlocNotesActivity(9862): Nom : 1
    04-16 20:32:35.580: VERBOSE/BlocNotesActivity(9862): Index : 1
    04-16 20:32:35.580: VERBOSE/BlocNotesActivity(9862): Test inFor: 1
    04-16 20:32:35.580: VERBOSE/BlocNotesActivity(9862): Test : 1
    04-16 20:32:35.580: VERBOSE/BlocNotesActivity(9862): Test : 1
    04-16 20:32:35.580: VERBOSE/BlocNotesActivity(9862): Jepasselà
    04-16 20:32:35.580: VERBOSE/BlocNotesActivity(9862): i :0
    04-16 20:32:35.580: VERBOSE/BlocNotesActivity(9862): Notes Affichées :1
    04-16 20:32:35.580: VERBOSE/BlocNotesActivity(9862): i :1
    04-16 20:32:35.580: VERBOSE/BlocNotesActivity(9862): Notes Affichées :1

    Merci à vous ! je ne sais plus quoi faire

  2. #2
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Met l'instanciation de ton objet Note dans la boucle for.
    Là actuellement tu utilise toujours le même que tu met dans le tableau

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Et depuis quelque temps la syntaxe du "for" a évolué:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for (File f : ListOfFile) {
     
    }
    (au passage, traditionnellement, seuls les types commencent par une majuscule, les variables toujours par une minuscule, par exemple la ligne "NotesArrayAdapter.clear();" me fait penser immédiatement à l'appel d'une fonction statique sur la classe NotesArrayAdapter....)


    Tu vas me dire ... mais j'ai besoin de l'index pour remplir mon tableau... mais la encore il y a la solution "ArrayList"... je m'explique, si une exception survient dans la lecture d'un seul fichier, tout s’arrête....
    Exemple:
    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
     
    public Note[] lectureNotes()
    {
        ArrayList<Note> notesList = new ArrayList<Note>();
        File[] listOfFiles = manager.listFiles();
        for (File f : listOfFiles) {
            try {
                FileInputReader reader = new FileInputReader(f);
                try {
                    Note note = new Note();
                    note.read(reader); // <= encapsulation de la lecture dans l'objet Note... plus propre
                    notesList.add(note);
                } finally {
                    reader.close(); 
                }
            } catch (Exception ex) {
                Log.w("MON_TAG","Failed to read from "+f,ex);
            }
        }
        return notesList.toArray(new Note[notesList.size()]);
    }
     
    public void afficherNotes(Note[] notes)
    {
        if (notes != null) {
            this.notesAdapter.clear(); // on utilise 'this' pour bien marquer que c'est un objet de la classe !
            for (Note n : notes) 
                 this.notesAdapter.add(n.getName());  // pourquoi pas paser l'objet Note lui-meme ?
            this.notesAdapter.notifyDataChange(); // <= ou un truc du genre je sais plus trop !
        }
    }

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 22
    Par défaut
    Merci pour votre aide !

    Désolé j'ai un peu tendance a être laxiste sur les noms de variable et d'objet

    Je ne connaissais pas ArrayList, mais j'avais essayé de cette façon avec un Vector. C'est pratiquement identique à l'utilisation. En ce qui concerne le For je ne savais pas qu'il avait évolué. je suis resté a la vieille école

    J'ai modifié un peu le code en suivant vos conseils. Mais toujours le même problème !

    L'objet de type ArrayList est bien remplis dans le For. Et calé sur le dernier objet en sortant. et ceux pour tous les objets contenus dans le ArrayList. Je n'ai jamais vu ça . Je fais des erreurs, c'est sur. Mais là, niveau algorithmie c'est clair comme de l'eau de roche ! Je ne vois vraiment pas où ça coince !

    -----20h40~-----

    J'ai finalement séparé le vilain code du reste de l'application pour faire des tests plus facilement.
    Le programme doit normalement lire les Fichiers contenu dans /sdcard/Notes/
    et les afficher dans le Log. une IHM Hello World suffira

    voici le programme en deux fichiers :
    package com.mp.essaifile

    EssaiFileActivity.java
    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
    package com.mp.essaifile;
     
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.util.ArrayList;
     
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Environment;
    import android.util.Log;
     
    public class EssaiFileActivity extends Activity {
     
    	private static String TAG ="essai";
    	ArrayList<Note> notesList = new ArrayList<Note>();
     
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            start();
            afficherResultat(this.notesList);
        }
        public void afficherResultat(ArrayList<Note> notearrayList){
        	Note[] notearray = new Note[notearrayList.size()];
        	notearrayList.toArray(notearray);
     
        	for(int n =0; n<notearray.length;n++){
        		Log.v(TAG,"NOTE : " + notearray[n].getFilename() + " -> "+ notearray[n].getName()+" | Contenu: " + notearray[n].getContent());
        	}
        }
        public String getNoteName(String filename){
        	String name = filename.substring(0, (filename.length()-4));
    		return name;
        }
     
        public void start(){
        	File[] ListofFile;    	
        	File manager = new File(Environment.getExternalStorageDirectory() + "/Notes/");
        	int i = 0;
        	if (manager.exists()){
    	    	ListofFile=manager.listFiles();
    	    	//Log.v(TAG,"nombre de fichier: " + ListofFile.length);	
    	    	for (File f : ListofFile){	    		
    	    		notesList.add(getNote(f));
    	    		Log.v(TAG,"for note :"+notesList.get(i).getName());
    	    		i++;
    	    	}
        	}
        }
     
        public Note getNote(File file){
        	FileReader reader =null;
    		try {
    			reader = new FileReader(file);
    		} catch (FileNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		Note note = new Note();
    		note.setName(getNoteName(file.getName()));
    		note.read(reader);
    		note.setFilename(file.getName());
        	Log.v(TAG,"note : " + note.getName());
        	Log.v(TAG,"note adress: " + note);
     
    		return note;
     
        }
    }
    Note.java

    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
    package com.mp.essaifile;
     
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
     
    import android.util.Log;
     
        class Note{
     
        	private static String name;
        	private static String content;
        	private static String filename;
        	private static String TAG = "Note";
     
        	public Note(String name,String content, String filename){
        		this.name=name;
        		this.content=content;
        		this.filename=filename;
        	}
     
        	public Note () {
        		// TODO Auto-generated constructor stub
        	}
     
        	public String getContent() {
        		return content;
        	}
     
        	public void setContent(String content) {
        		this.content = content;
        	}
     
        	public String getName() {
        		return name;
        	}
     
        	public void setName(String name) {
        		this.name = name;
        	}
     
        	public String getFilename() {
        		return filename;
        	}
     
        	public void setFilename(String filename) {
        		this.filename = filename;
        	}
     
        	public void read(FileReader reader){
     
        		BufferedReader in = new BufferedReader(reader);
        		StringBuffer objBuffer = new StringBuffer();
        		String strLine;
        		try {
        			while ((strLine = in.readLine()) != null) {
        				objBuffer.append(strLine);
        				objBuffer.append("\n");
        			}
        		} catch (IOException e) {
        			// TODO Auto-generated catch block
        			Log.e(TAG,"Erreur de lecture !");
        			e.printStackTrace();
        		}
     
        		String content = objBuffer.toString();
     
        		this.setContent(content);
     
        	}
        }

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Tiberium76 Voir le message
    Je ne connaissais pas ArrayList, mais j'avais essayé de cette façon avec un Vector. C'est pratiquement identique à l'utilisation.
    En fait, Vector est protégé contre le multithread, ArrayList est la même chose en plus rapide donc

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 22
    Par défaut
    Problème résolu !

    J'ai mis des static sur mes attributs dans la classe Note par erreur

    Merci à tous pour votre aide

Discussions similaires

  1. Problème Axis2/ADB et tableaux d'objets
    Par havernas dans le forum Services Web
    Réponses: 4
    Dernier message: 05/08/2009, 17h24
  2. Problème avec des tableaux d'objets
    Par flash link dans le forum SDL
    Réponses: 3
    Dernier message: 18/03/2009, 17h54
  3. [D2005]Problème de tableaux dynamique
    Par Laurent Dardenne dans le forum Delphi .NET
    Réponses: 8
    Dernier message: 26/07/2005, 11h56
  4. [hibernate]Problème de récupération d'objet...
    Par roxx62 dans le forum Hibernate
    Réponses: 1
    Dernier message: 07/07/2005, 11h36
  5. Réponses: 14
    Dernier message: 02/03/2005, 18h15

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