ArrayIndexOutOfBoundsExeption

Résolu/Fermé
airliquide - 11 janv. 2012 à 17:09
 airliquide - 11 janv. 2012 à 22:32
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

KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
Modifié par KX le 11/01/2012 à 19:18
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
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
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
11 janv. 2012 à 20:26
Aucun de mes deux codes ne marchent ? L'erreur est peut-être ailleurs... dans cursorToNom ?
0
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
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
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
11 janv. 2012 à 21:23
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
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
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