ArrayIndexOutOfBoundsExeption

Résolu
Bonjour,

Bonjour voila pour mon ecole je doit bosse avec une bdd sur android avec java .
Pour cela j ai utilisé des classes diverses et creé des moyens d y aceder en l occurence via des tableau et des curseurs .

Et arrive un moment ou je doit transformer un curseur en tableau d objet .
Je fait don ceci

Skatepark[] tabspot = new Skatepark[c.getCount()];
		while (c.isLast()==false) 
		{
			tabspot[i]=cursorToNom(c);
			c.moveToNext();
			i++;
		}
		return(tabspot);


Et la j obtient un ArrayOutOfBound .
Mais d ou cela viens .
J ai conpris qu il y avait un probleme avec les indices des tableau mais ou ??

Merçi de votre aide

4 réponses

  1. j ai changé mes methodes et avec ma classe Junit de test je viens de m appercevoir que cette ligne ne renvoi pas de donnée pourtant dans ma bdd tout est ok

    public Skatepark[] getgeopointAllSpots()
    	{
    		//Récupère dans un Cursor les valeur
    
    		Cursor c = bdd.query(TABLE_SPOTS ,null, null, null, null, null, null);
    		if (cursorToNom(c)==null)
    		{
    			Log.e("essai", "ereur no data found");
    		}
    		return(cursorsToNom(c));
    	}
    1. Modérateur
      J'avoue que côté BDD et Androïd j'y connais pas grand chose en Java, et je ne vois plus le lien avec ton premier code... Où te sers-tu de getgeopointAllSpots ?
    2. dans une autre classe qui me permet de les afficher avec un marqueur sur une carte . Mais la bdd ne semble pas vouloir marcher ... :(
    3. j ai trouvé mon problème un gros manque de structure de controle dans mes methodes .
      Du coup renvoi d un pointeur null( java : null pointer exeption ) d ou un tableau sans entier d index d'ou ArrayIndexOutOfBoundsExeption
  2. ouep peut etre j experimente je verrais ...
    j ai changé quelques methodes mais l effect tunnel me met de plus en plus oeillères ...
    1. merci d avoir pris le temps de me repondre
      ben dans les deux cas j ai bien mon i=0 et je fait exactement le bon nombre d iteration .
      Donc je n y comprend rien . De plus je n ais pas de valeur associée a cette exeption .
      1. Modérateur
        Aucun de mes deux codes ne marchent ? L'erreur est peut-être ailleurs... dans cursorToNom ?
    2. Modérateur
      Normalement tu as une valeur associée à ton ArrayIndexOutOfBoundsExeption, il faut que tu la compare avec la taille de ton tableau.

      Je vois deux sources d'erreurs possibles :
      * i n'est pas initialisé à 0
      * on fait plus de c.moveToNext() que la valeur c.getCount() de départ, par exemple en modifiant c dans la méthode cursorToNom

      int n = c.getCount();
      Skatepark[] tabspot = new Skatepark[n];
      
      for (int i=0; i<n; i++, c.moveToNext())
          tabspot[i]=cursorToNom(c);
      
      return(tabspot);

      Autre méthode, mais je ne sais pas si les Collection sont supportés sur Androïd :

      LinkedList<Skatepark> liste = new LinkedList<Skatepark>();
      
      while (!c.isLast())
      {
          liste.add(cursorToNom(c));
          c.moveToNext();
      }
      return liste.toArray(new Skatepark[liste.size()]);
      La confiance n'exclut pas le contrôle