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); }Malheureusement ce ne marche pas si il y a moins de 5 scores dans la base.
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; }
J'ai donc voulu utilisé un for.
Cette méthode plante des le premier bibli[i].setId(c.getInt(NUM_COL_ID));
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;
Ensuite j'ai essayé ceci
Tout mon tableau possède alors les mêmes valeurs, la dernière des 5 que je veux afficher.
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;
Merci de m'indiquer si j'ai fais des erreurs dans mon for.
Partager