Problème utilisation for pour une requête
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.
Code:
1 2 3 4 5 6 7 8
| public Score[] cinqPlusPetitTemps()
{
Cursor c = bdd.rawQuery(REQUETE_5_PLUS_PETIT,null);
return cursorToTabScore(c);
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| 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.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| 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[i].setId(c.getInt(NUM_COL_ID));
Ensuite j'ai essayé ceci
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| 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.