Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2695 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Probleme avec un tableau structuré

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme avec un tableau structuré

n°2013000
leloos
Posté le 29-07-2010 à 18:21:28  profilanswer
 

Hello, je debute le dev sous Android et je debute egalement sous Java (je cumule) et du coup, je rencontre quelques difficultés avec le code suivant :
 

Code :
  1. // Ma structure
  2. public class typesite {
  3.  private String sitename;
  4.  private String sitecat;
  5.  private String siteurl;
  6.  private String sitelogin;
  7.  private String sitepwd;
  8.  private String siteemail;
  9.  public void feedit(
  10.    String name, String categ, String url,
  11.    String login, String password, String email) {
  12.   sitename  = name;
  13.   sitecat  = categ;
  14.   siteurl  = url;
  15.   sitelogin  = login;
  16.   sitepwd  = password;
  17.   siteemail = email;
  18.  }
  19. };
  20. public typesite siteinfo[];   // Tableau structuré


 
Ensuite dans ma classe principale je veux alimenter mon tableau en utilisant la méthode ma classe
 

Code :
  1. siteinfo[0].feedit( "YAHOO", "EMAIL", "http://www.yahoo.fr","test1", "passwd1", "email@email.fr" );


 
 
Aucune erreur de syntax detectée dans Eclipse, sauf que lors de l'execution, l'emulateur android detecte une erreur.
Et quand je met la ligne du dessus en commentaire, la ça passe, le programme se charge bien.
 
Vous avez une idée d'ou ça peut venir ?  
J'avoue que le java change un peu du C++ et je suis un peu perdu.
Merci d'avance ;)
 

mood
Publicité
Posté le 29-07-2010 à 18:21:28  profilanswer
 

n°2013094
bidem
Posté le 30-07-2010 à 09:44:00  profilanswer
 

Sans le message d'erreur ça va être dur de te dire d'où ça vient.
 
Mais il y a quand même de grandes chances que tu ais un NullPointerException qui serait dû au fait que tu n'aies pas initialisé siteinfo.
 
Donc si j'ai raison, soit siteinfo est null, soit il est vide, soit la valeur à l'indice 0 est null

n°2013175
Deamon
Posté le 30-07-2010 à 12:56:54  profilanswer
 

La ligne 22 : public typesite siteinfo[];  
elle est placée dans une autre classe ? Autrement dit siteinfo c'est un membre d'une autre classe ?
 
Utilise des ArrayList plutôt que des tableaux ça sera sans doute plus pratique.

n°2013492
leloos
Posté le 02-08-2010 à 10:04:40  profilanswer
 

Bin en fait lors de la compilation il n'y a pas d'erreur (ou alors y'a une log avec un warning que j'ai pas vu). C'est lors de l'execution du programme que celui ci plante.
Sinon oui, la ligne 22 est dans une autre classe. ça viendrait de la le souci ?
 
Pour les Arraylist je connais pas mais est ce que je peux faire un ArrayList de ma classe (pour garder ma structure)
Un truc du genre
 

Code :
  1. public class typesite {
  2.  private String sitename;
  3.  private String sitecat;
  4.  private String siteurl;
  5.  private String sitelogin;
  6.  private String sitepwd;
  7.  private String siteemail;
  8. }
  9.   ArrayList arrList typesite = new ArrayList typesite
  10.   arrList.Sitename.add("Toto" );
  11.   ....


   
  Est ce que c'est correct ce genre de truc ou bien ce n'est pas comme ça qu'on emploi cette instruction ?

n°2013500
Deamon
Posté le 02-08-2010 à 10:28:58  profilanswer
 

Oula non ça va pas.  
Déjà mets une majuscule à typesite car c'est une classe et en Java on en met aux classes.
 

Code :
  1. Typesite siteinfo = new Typesite();
  2. siteinfo.feedit( "YAHOO", "EMAIL", "http://www.yahoo.fr","test1", "passwd1", "email@email.fr" );
  3.  
  4. ArrayList<Typesite> arrList = new ArrayList<Typesite>();
  5. arrList.add(siteinfo);

n°2013533
leloos
Posté le 02-08-2010 à 11:24:02  profilanswer
 

Ok je commence a comprendre un peu mieux le principe des ArrayList. Merci ;)
 
Bon par contre mon programme plante toujours :'(
Je pense que ça viens de l'instruction pour récupérer les données du tableau
 
Je vous met mon code si ça peut vous aider :
 

Code :
  1. public class Main_class extends Activity {
  2.  
  3. public class Typesite {
  4.  private String sitename;
  5.  private String sitecat;
  6.  private String siteurl;
  7.  private String sitelogin;
  8.  private String sitepwd;
  9.  private String siteemail;
  10.  public void feedit(String name, String categ, String url,
  11.                   String login, String password, String email) {
  12.   sitename  = name;
  13.   sitecat  = categ;
  14.   siteurl  = url;
  15.   sitelogin = login;
  16.   sitepwd  = password;
  17.   siteemail = email;
  18.  }
  19. };
  20. public Typesite siteinfo = new Typesite();
  21. ArrayList<Typesite> arrList = new ArrayList<Typesite>();
  22.   public String sitename[];
  23.  
  24.     @Override
  25.     public void onCreate(Bundle savedInstanceState) {
  26.          
  27.      super.onCreate(savedInstanceState);
  28.       setContentView(R.layout.main);    // Ecran principal
  29.      
  30.       // Alimentation des données
  31.      siteinfo.feedit("YAHOO", "EMAIL", "http://www.yahoo.fr",
  32.                  "test1", "passwd1", "email1@email.fr" );
  33.      arrList.add(siteinfo);
  34.    
  35.      siteinfo.feedit("GMAIL", "EMAIL", "http://www.gmail.com",
  36.                  "test2", "passwd2", "email2@email.fr" );
  37.      arrList.add(siteinfo);
  38.    
  39.      siteinfo = arrList.get(0);
  40.      sitename[0] = siteinfo.sitename;
  41.      siteinfo = arrList.get(1);
  42.      sitename[1] = siteinfo.sitename;
  43.      
  44.       (...)   
  45.     } 
  46. }


 
Quand je met les valeurs en dur dans mon tableau sitename, ça fonctionne bien, j'ai bien un resultat affiché a l'ecran, mais par contre le fait de récuéprer les valeurs dans arrList me fait planter le programme.
 
Y'a pas une histoire comme quoi faut initialiser le ArrayList ? C'est peut etre pour ça que ça plante ?

n°2013539
Deamon
Posté le 02-08-2010 à 11:30:49  profilanswer
 

Faut l'initialiser dans le constructeur ou dans ta fonction.
Mais si c'était mal initialisé ça planterait au add.
 
En plus c'est faux ce que tu fais. En fait tu ajoutes le même siteinfo dans ta liste. Dans la liste ça prend la référence de l'objet si je dis pas de bêtise. Donc t'auras 2 fois les valeurs avec GMAIL.
 
Pourquoi au lieu de feedit tu ne fais pas ça dans le constructeur de Typesite ? Et tu fais new à chaque fois.

n°2013550
leloos
Posté le 02-08-2010 à 11:52:14  profilanswer
 

Effectivement passer l'affectation au constructeur simplifiera grandement ;)
J'ai donc supprimé la fonction feedit et j'ai passé les instructions au constructeur de la classe Typesite
J'ai egalement créer une fonction getname() qui renvoi la valeur String de la zone sitename de cette meme classe. (vu que j'avais déclaré cette zone en private, je suis pas sur de pouvoir y acceder directement)
 
Du coup pour alimenter mon tableau je passe les instructions suivantes :
 

Code :
  1. siteinfo = new Typesite("YAHOO", "EMAIL", "http://www.yahoo.fr", "test1", "passwd1", "email1@email.fr" );
  2. arrList.add(siteinfo);
  3.    
  4. siteinfo = new Typesite("GMAIL", "EMAIL", "http://www.gmail.com", "test2", "passwd2", "email2@email.fr" );
  5. arrList.add(siteinfo);


     
Ensuite pour récupérer les valeurs je fais :
 

Code :
  1. siteinfo = arrList.get(0);


 
C'est censé me récupérer la première "ligne" de mon tableau dans ma structure siteinfo
Jusque la tout va bien.
 
Apres je tente de récupérer la valeur du champ sitename de cette première ligne :
 

Code :
  1. sitename[0] = siteinfo.getname();


 
Et la, bien qu'a la compilation aucune erreur ne soit detectée, le programme plante a l'execution.
Je pense que la le probleme se situe plus dans l'affectation de valeur.
 
En c je faisais un strcpy pour copier un champ String dans un autre et la j'ai l'impression qu'il faut faire la meme chose. Je vais chercher si une instruction similaire existe (en tout cas strcpy n'existe pas) mais a mon avis c'est ça.
 
Si jamais vous avez la reponse avant moi ou bien si je me gourre totalement dites le moi ;)

n°2013555
bidem
Posté le 02-08-2010 à 12:02:09  profilanswer
 

C'est juste que tu n'initialises pas sitename
 

Code :
  1. sitename = new String[arrList.size()];


 

n°2013557
Deamon
Posté le 02-08-2010 à 12:08:13  profilanswer
 

Pourquoi ne pas utiliser également une ArrayList pour sitename ? Et est-ce que c'est pas redondant avec la liste  arrList ?

mood
Publicité
Posté le 02-08-2010 à 12:08:13  profilanswer
 

n°2013583
leloos
Posté le 02-08-2010 à 14:04:38  profilanswer
 

bon apres plusieurs essais infructeux avec mon tableau de String j'ai fait comme tu m'as dit j'ai transformé mon tableau de String sitename en ArrayList

Code :
  1. ArrayList<String> sitename;


Du coup je l'ai initialisé en debut de la classe principale :

Code :
  1. sitename = new ArrayList<String>();


Ensuite, apres avoir alimenté mon tableau siteinfo avec toutes mes informations, j'ai fait une boucle pour récupérer juste la zone siteinfo.sitename et l'insérer dans mon nouveau ArrayList    

Code :
  1. for(i=0; i<2; i++)
  2. {
  3.   siteinfo = arrList.get(i);    
  4.   sitename.add(i, siteinfo.sitename);
  5. }

 
Le test est concluant, ce coup ci je ne fais plus planter l'emulateur :)
     
     
Merci a tous pour votre aide

n°2013584
Deamon
Posté le 02-08-2010 à 14:10:15  profilanswer
 

Oublie pas de modifier le i<2 en i<arrList.size()
;)

n°2013596
leloos
Posté le 02-08-2010 à 14:25:40  profilanswer
 

Oh oui pas bete ça, merci du conseil ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Probleme avec un tableau structuré

 

Sujets relatifs
problème avec la création d'un fichier phpDéploiement de WebService (problème avec mon WSDL)
problème de div position absolute et IE [RESOLU]Probleme pour convertir une chaine en variable double
Problème de récupération de valeur d'une ListBox dans une procédureProblème en PHP pour une requête SQL
Problème de compilationProblème de code dans fichier XML
Probleme tableau 2 dimensions + structure en C 
Plus de sujets relatifs à : Probleme avec un tableau structuré


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR