Zaark24 Posté(e) 14 janvier 2011 Share Posté(e) 14 janvier 2011 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 More sharing options...
chpil Posté(e) 14 janvier 2011 Share Posté(e) 14 janvier 2011 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 More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.