2010-06-07 7 views
0

Dans mon application, j'ai un champ Curseur et dans la méthode onStart() de mon service Android, je le crée en récupérant des enregistrements de ma base de données. Quand je regarde dans mon curseur dans la méthode onStart() je trouve un certain nombre d'enregistrements, mais quand j'essaie de les utiliser dans ma méthode trigger(), il n'y a aucun enregistrement.Utiliser un champ Cursor dans une autre méthode

le champ private Cursor c;

dans onStart() c = dbHelper.fetchAllRecords();

dans déclencheur() c.getCount() renvoie 0

Je ne fermaient pas le curseur plus tôt que dans ma onDestroy() méthode

Répondre

1

Il est fort probable que le curseur ne soit pas en train de "perdre des enregistrements" mais plutôt que vous soyez se rendre au c.movetofirst() avant de parcourir les dossiers CHAQUE FOIS. En d'autres termes, lorsque vous itérez les enregistrements du curseur, le pointeur d'enregistrement monte, monte, monte, jusqu'à ce qu'il passe "au-delà du dernier enregistrement". Ainsi, pour parcourir de nouveau le curseur, vous devez réinitialiser le pointeur d'enregistrement en exécutant c.movetofirst().

c.moveToFirst(); 
while (!c.isAfterLast()) 
    print ("Data: " + c.getString(0)); 

ensuite en cours d'exécution même en boucle à nouveau ne sera pas exécuter car pointeur d'enregistrement du curseur n'a pas été remis à zéro:

while (!c.isAfterLast()) 
    print ("Data: " + c.getString(0)); 

(rien imprimé)

Donc, vous réellement besoin pour changer le deuxième bloc de code à:

c.moveToFirst(); 
while (!c.isAfterLast()) 
    print ("Data: " + c.getString(0)); 
Questions connexes