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 :

Tableau pas récupéré


Sujet :

Android

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2015
    Messages : 12
    Par défaut Tableau pas récupéré
    Bonjour tout le monde,
    je ne comprend pas pourquoi je n'arrive pas à récupérer mon tableau rightId.
    Si quelqu'un pouvait m'aider à comprendre pourquoi
    Voici la class qui contient le code fautif :

    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
     
    import android.widget.Toast;
     
    import com.opencsv.CSVReader;
    import java.io.FileReader;
    import java.io.IOException;
     
    public class Rcsv {
        public int[] readThis(int id, int value) throws IOException {
            CSVReader reader = new CSVReader(new FileReader("C:\\AutoPlay_Android\\AutoPlay\\app\\src\\main\\res\\raw\\md.csv"));
            String[] nextLine;
            int rightId[] = new int[3];
            int i = 0;
            while ((nextLine = reader.readNext()) != null) {
                // nextLine[] is an array of values from the line
                int idValue =  Integer.parseInt(nextLine[id]);
                if (idValue == value || idValue == 2 || value == 2) {
                    rightId[i] = Integer.parseInt(nextLine[0]);
                    i = i++ ;
                }
                else {}
            }
     
            return rightId;
        }
     
    }
    Et la method avec laquelle je l'appelle dans ma fonction principale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public int[] appelRead(int id, int value) {
            Rcsv rb = new Rcsv();
            try {
                int[] ret = rb.readThis(id, value);
                return ret;
            } catch (IOException e) {
                e.printStackTrace();
            }
     
            return null;
        }

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    Il y a deux choses qui me dérangent :

    Premièrement, es-tu sûr que ton fichier ne contient que trois valeurs intéressantes ?

    Deuxièmement, i = i++; ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2015
    Messages : 12
    Par défaut
    Yep, c'est un fichier de test qui ne contient que 3 valeurs (toute intéressantes).

    Ah, autant pour moi, je débute en java et j'ai pas réfléchis en me disant que l'incrémentation avec ++ devait marcher. Je l'ai donc remplacé par :
    Mais ça ne fonctionne toujours pas.
    Cela peut-il être dû aux séparateurs (à savoir : " , ") de mon fichier csv ? Quels sont ceux reconnus par opencsv ?

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par Naka111 Voir le message
    Yep, c'est un fichier de test qui ne contient que 3 valeurs (toute intéressantes).

    Ah, autant pour moi, je débute en java et j'ai pas réfléchis en me disant que l'incrémentation avec ++ devait marcher.
    Ho i++ incrémente bien la valeur de i, et retourne l'ancienne valeur, que tu stocke ensuite dans i, donc au final i ne bouge pas. C'est soit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    i = i+1;
    i+=1;
    ou
    i++;
    Mais ça ne fonctionne toujours pas.
    Comme toujours, merci de préciser ce que veux dire "ne fonctionne pas".

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2015
    Messages : 12
    Par défaut
    D'accord, merci.

    Je veux dire par là que je ne récupère toujours pas mon tableau par le return.
    Pour vérifier si je le récupère bien, j'utilise ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int value = 2;
                    int[] idList = appelRead(2, value);
                    int[] test = {0, 1, 2};
                    if (Arrays.equals(idList, test)) {
                        Toast.makeText(MainActivity.this, "nice one bro", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(MainActivity.this, "nope", Toast.LENGTH_SHORT).show();
                    }
    Je retranscrit ici le fichier csv qui me sert pour mes tests :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    0,A,0,0,0,0
    1,B,1,1,1,1
    2,C,2,2,2,2

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Si u reçois null, c'est que tu es passé par ton catch exception. Dans ce cas, ce serait bie de pouvoir voir la stacktrace que tu as affiché.

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2015
    Messages : 12
    Par défaut
    A vrai dire, je ne sais pas vraiment comment faire ça (j'en suis vraiment au début de mon apprentissage)
    J'utilise android studio.
    Est-ce ceci que tu appel stacktrace ?
    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
    this = {BlockGuardOs@831962120024} 
     os = {Posix@831962120040} 
      Class has no fields
    Exception = {ErrnoException@831964558760} 
     functionName = {String@831964759760} "open"
      value = {char[4]@831964759792} 
       0 = 'o' 111
       1 = 'p' 112
       2 = 'e' 101
       3 = 'n' 110
      hashCode = 3417674
      offset = 0
      count = 4
     errno = 2
     cause = {ErrnoException@831964558760} "libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)"
      functionName = {String@831964759760} "open"
       value = {char[4]@831964759792} 
       hashCode = 3417674
       offset = 0
       count = 4
      errno = 2
      cause = {ErrnoException@831964558760} "libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)"
       functionName = {String@831964759760} "open"
        value = {char[4]@831964759792} 
        hashCode = 3417674
        offset = 0
        count = 4
       errno = 2
       cause = {ErrnoException@831964558760} "libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)"
        functionName = {String@831964759760} "open"
         value = {char[4]@831964759792} 
         hashCode = 3417674
         offset = 0
         count = 4
        errno = 2
        cause = {ErrnoException@831964558760} "libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)"
        detailMessage = null
        stackState = {int[40]@831964558800} 
        stackTrace = null
        suppressedExceptions = {Collections$EmptyList@831962087528}  size = 0
       detailMessage = null
       stackState = {int[40]@831964558800} 
       stackTrace = null
       suppressedExceptions = {Collections$EmptyList@831962087528}  size = 0
      detailMessage = null
      stackState = {int[40]@831964558800} 
      stackTrace = null
      suppressedExceptions = {Collections$EmptyList@831962087528}  size = 0
     detailMessage = null
     stackState = {int[40]@831964558800} 
     stackTrace = null
     suppressedExceptions = {Collections$EmptyList@831962087528}  size = 0

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    mouais, c'est le bon objet, mais il devrait apparaitre de manière lisible dans le logcat d'android, c'est l'output de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    catch (IOException e) {
                e.printStackTrace();
            }
    Mais bon, en l'occurence, on peut déjà voir que tu essaie d'ouvrir un fichier qui n'existe pas.

    libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)

  9. #9
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2015
    Messages : 12
    Par défaut
    Pourtant mon fichier existe bel et bien, et il se trouve bien dans le répertoire indiqué. J'ai également essayer en le plaçant dans un autre disque, mais cela n'a rien changé.

    EDIT - Je me dis que cela pourrait bien avoir un liens avec le fait que j'utilise android studio : je test mon appli sur un emulateur android, il serait donc logique que celui ne puisse pas acceder aux fichiers de C:/.
    Mais avec le chemin relatif suivant, l'appli ne donne pas plus de résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CSVReader reader = new CSVReader(new FileReader("..\\..\\..\\..\\..\\res\\raw\\md.csv"));

  10. #10
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Android n'a accès qu'à ce qui se trouve dans la machine android pas au pc hôte.

  11. #11
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2015
    Messages : 12
    Par défaut
    Après recherches, il apparait que je dois mette mon fichier dans le dossier assets.
    Je modifie donc mon code de cette manière :
    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
    public class Rcsv {
        public ArrayList readThis(int id, int value) throws IOException {
            String[] nextLine;
            ArrayList rightId = new ArrayList();
            int i = 0;
            String fileName = "md.csv";
            InputStream csvStream = AssetManager.open(fileName);
            InputStreamReader csvStreamReader = new        InputStreamReader(csvStream);
            CSVReader csvReader = new CSVReader(csvStreamReader);
            String[] line;
     
            // throw away the header
            csvReader.readNext();
     
            while ((nextLine = csvReader.readNext()) != null) {
                // nextLine[] is an array of values from the line
                int idValue =  Integer.parseInt(nextLine[id]);
                if (idValue == value || idValue == 2 || value == 2) {
                    rightId.add(Integer.parseInt(nextLine[0]));
                    i++ ;
                }
                else {}
            }
    mais android studio m'indique sur open() : "Non-static method 'open(java.lang.String)' cannot be referenced from a static context".

    Mais je ne peux pas creer d'instance avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AssetManager inst = new AssetManager();
    puisque AssetManager n'est pas une class publique.

  12. #12
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2015
    Messages : 12
    Par défaut
    J'ai "évité" le message d'erreur en modifiant mon code de la façon suivante :

    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
    public final List<String[]> readCsv(Context context) {
      List<String[]> questionList = new ArrayList<String[]>();
      AssetManager assetManager = context.getAssets();
     
      try {
        InputStream csvStream = assetManager.open(CSV_PATH);
        InputStreamReader csvStreamReader = new InputStreamReader(csvStream);
        CSVReader csvReader = new CSVReader(csvStreamReader);
        String[] line;
     
        // throw away the header
        csvReader.readNext();
     
        while ((line = csvReader.readNext()) != null) {
          questionList.add(line);
        }
      } catch (IOException e) {
        e.printStackTrace();
      }
      return questionList;
    }
    Mais je me retrouve toujours avec le même message :
    libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
    Pourtant, mon fichier existe bel et bien, porte le nom indiqué dans le code, et est bien placé dans le repertoire assets (créer par android studio).
    J'ai l'impression de tourner en rond...

  13. #13
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] files = assetManager.list("");
    tu le trouve?

  14. #14
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2015
    Messages : 12
    Par défaut
    Et bien non, j'obtiens toujours ce même message d'erreur dans la stacktrace.
    J'imagine donc que c'est parce que ma liste est vide, et que
    String [] file
    est donc null ?
    Mais si c'est ça, je ne comprend pas comment le simple de l'appeler (sans même chercher à l'afficher, j'ai essayé) fait planter l'appli. Un return ne peux pas valoir null ?
    Et enfin, sachant que mon fichier est bien dans le dossier assets créé par android studio, que puis-je faire de plus ?

    Merci de ton aide et du temps que tu me consacre en tout cas.

  15. #15
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Ca affiche quoi le contenu de ton String[] files?

  16. #16
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2015
    Messages : 12
    Par défaut
    Et bien j'essaie de le faire afficher dans un toast mais l'application plante systématiquement, avec l'erreur "ibcore.io.ErrnoException: open failed: ENOENT (No such file or directory)", donc j'en deduis qu'il ne contient rien, mais puisque je n'arrive pas à l'afficher, je n'en suis pas certain.
    Comment puis-je le vérifier ?

  17. #17
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ben tu supprime le code qui plante pour n'afficher que ça?
    Tu l'affiche dans le logcat?
    ....

  18. #18
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2015
    Messages : 12
    Par défaut
    Oui, mais cela ne change rien, toujours cette même erreur null.
    J'ai trouvé sur internet un morceau de code dont que je voudrais comprendre (parce copier betement c'est mal ) en esperant trouver une solution.
    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
    public final List<String[]> readCsv(Context context) {
      List<String[]> questionList = new ArrayList<String[]>();
      AssetManager assetManager = context.getAssets();
     
      try {
        InputStream csvStream = assetManager.open(CSV_PATH);
        InputStreamReader csvStreamReader = new InputStreamReader(csvStream);
        CSVReader csvReader = new CSVReader(csvStreamReader);
        String[] line;
     
        // throw away the header
        csvReader.readNext();
     
        while ((line = csvReader.readNext()) != null) {
          questionList.add(line);
        }
      } catch (IOException e) {
        e.printStackTrace();
      }
      return questionList;
    }
    Tout me parait assez clair, sauf le parametre "context" envoyé à la method. A quoi correspond-t-il ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/03/2008, 14h44
  2. Réponses: 12
    Dernier message: 09/12/2007, 12h52
  3. Session enregistrée mais pas récupérée
    Par Dadz dans le forum Langage
    Réponses: 15
    Dernier message: 06/06/2007, 11h28
  4. Réponses: 1
    Dernier message: 16/05/2007, 15h52
  5. Réponses: 2
    Dernier message: 20/09/2006, 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