ArrayIndexOutOfBoundsExeption

Résolu
airliquide -  
 airliquide -
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. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
    0
  2. airliquide
     
    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 .
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Aucun de mes deux codes ne marchent ? L'erreur est peut-être ailleurs... dans cursorToNom ?
      0
  3. airliquide
     
    ouep peut etre j experimente je verrais ...
    j ai changé quelques methodes mais l effect tunnel me met de plus en plus oeillères ...
    0
  4. airliquide
     
    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));
    	}
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      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 ?
      0
    2. airliquide
       
      dans une autre classe qui me permet de les afficher avec un marqueur sur une carte . Mais la bdd ne semble pas vouloir marcher ... :(
      0
    3. airliquide
       
      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
      0