Aller au contenu

Probleme Utilisation for pour une requete


Recommended Posts

Bonjour, je suis en train de réaliser le jeu du taquin sur Android.

Pour gérer les scores j'utilise SQLite et je rencontre un petit soucis.

Je désire afficher seulement les 5 meilleurs scores dans mon écran des meilleurs scores

Pour cela j'ai réalisé ceci.

public Score[] cinqPlusPetitTemps()
{
	Cursor c = bdd.rawQuery(REQUETE_5_PLUS_PETIT,null);	

	return cursorToTabScore(c);


}

private Score[] cursorToTabScore(Cursor c){
	//si aucun élément n'a été retourné dans la requête, on renvoie null
	if (c.getCount() == 0)
		return null;

	//Sinon on se place sur le premier élément
	c.moveToFirst();


	Score l1 = new Score();
	Score l2 = new Score();
	Score l3 = new Score();
	Score l4 = new Score();
	Score l5 = new Score();	

	l1.setId(c.getInt(NUM_COL_ID));
	l1.setTemps(c.getLong(NUM_COL_TEMPS));
	l1.setPseudo(c.getString(NUM_COL_PSEUDO));

	c.moveToNext();

	l2.setId(c.getInt(NUM_COL_ID));
	l2.setTemps(c.getLong(NUM_COL_TEMPS));
	l2.setPseudo(c.getString(NUM_COL_PSEUDO));

	c.moveToNext();

	l3.setId(c.getInt(NUM_COL_ID));
	l3.setTemps(c.getLong(NUM_COL_TEMPS));
	l3.setPseudo(c.getString(NUM_COL_PSEUDO));

	c.moveToNext();

	l4.setId(c.getInt(NUM_COL_ID));
	l4.setTemps(c.getLong(NUM_COL_TEMPS));
	l4.setPseudo(c.getString(NUM_COL_PSEUDO));

	c.moveToNext();

	l5.setId(c.getInt(NUM_COL_ID));
	l5.setTemps(c.getLong(NUM_COL_TEMPS));
	l5.setPseudo(c.getString(NUM_COL_PSEUDO));

	Score[] bibli = new Score[]{l1,l2, l3, l4, l5};
	//on lui affecte toutes les infos grâce aux infos contenues dans le Cursor

	//On ferme le cursor
	c.close();

	//On retourne le livre
	return bibli;
}

Malheureusement ce ne marche pas si il y a moins de 5 scores dans la base.

J'ai donc voulu utilisé un for.

private Score[] cursorToTabScore(Cursor c){
	//si aucun élément n'a été retourné dans la requête, on renvoie null
	if (c.getCount() == 0)
		return null;

	//Sinon on se place sur le premier élément
	c.moveToFirst();

              Score[] bibli = new Score[5];


             for (int i = 0; i<5;i++)
	{


		bibli[i].setId(c.getInt(NUM_COL_ID));
		bibli[i].setTemps(c.getLong(NUM_COL_TEMPS));
		bibli[i].setPseudo(c.getString(NUM_COL_PSEUDO));

		c.moveToNext();


	}
               c.close();

	//On retourne le livre
	return bibli;

Cette méthode plante des le premier bibli.setId(c.getInt(NUM_COL_ID));

Ensuite j'ai essayé ceci

private Score[] cursorToTabScore(Cursor c){
	//si aucun élément n'a été retourné dans la requête, on renvoie null
	if (c.getCount() == 0)
		return null;

	//Sinon on se place sur le premier élément
	c.moveToFirst();

                 Score[] bibli = new Score[5];
                Score sc = new Score();

             for (int i = 0; i<5;i++)
	{


		sc.setId(c.getInt(NUM_COL_ID));
		sc.setTemps(c.getLong(NUM_COL_TEMPS));
		sc.setPseudo(c.getString(NUM_COL_PSEUDO));

                        bibli[i]=sc; 

		c.moveToNext();


	}
              c.close();

	//On retourne le livre
	return bibli;

Tout mon tableau possède alors les mêmes valeurs, la dernière des 5 que je veux afficher.

Merci de m'indiquer si j'ai fais des erreurs dans mon for.

Lien vers le commentaire
Partager sur d’autres sites

Quelque soit le cas, tu prends le problème du mauvais coté. Tu ne peux pas essayer de construire un tableau de 5 objets Score, si tu as moins que 5 lignes de résultat dans ton Cursor.

Il faudrait plutôt faire quelque chose comme cela:

private Score[] cursorToTabScore(Cursor c){
   //si aucun élément n'a été retourné dans la requête, on renvoie null
   if (c.getCount() == 0) {
       return null;
   }

   //Sinon on se place sur le premier élément
   c.moveToFirst();

   Score[] bibli = new Score[c.getCount()];

   for (int i = 0; i<c.getCount();i++)
   {
       Score sc = new Score();
       sc.setId(c.getInt(NUM_COL_ID));
       sc.setTemps(c.getLong(NUM_COL_TEMPS));
       sc.setPseudo(c.getString(NUM_COL_PSEUDO));
       bibli[i] = sc;

       c.moveToNext();
   }
   c.close();

   //On retourne le livre
   return bibli;
}

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...