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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
public Score[] cinqPlusPetitTemps()
	{
		Cursor c = bdd.rawQuery(REQUETE_5_PLUS_PETIT,null);	
 
		return cursorToTabScore(c);
 
 
	}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.