2011-03-23 4 views
2

J'essaie donc d'obtenir les valeurs d'une base de données SQLite dans un curseur, puis de choisir une valeur aléatoire. Je peux lire le curseur avec getString() comme je le ferais normalement dans la méthode, mais après le retour du curseur, il ne fonctionne pas correctement. Je ne sais pas pourquoi .. Voici ma méthode pour obtenir le curseur de la base de données. Cela semble fonctionner correctement.Android Cursor Problème

 public Cursor getRandomText(String Rating) 
    { 

     Cursor cursor = myDatabase.query("Elec0RandTexts", new String[] {"Message"}, "Rating=?", 
       new String[]{Rating}, null, null, null); 
     cursor.moveToFirst(); 

     cursor.close(); 

     return cursor; 

    } 

Voici mon code pour lire le curseur après son retour. Je fais probablement une erreur stupide et je ne m'en rends pas compte, mais je ne peux pas comprendre cela.

Merci,

~ Elec0

+0

Vous ne pouvez pas appeler close() sur le curseur que vous retournez, puis l'utiliser. Retirez cette ligne et fermez-la seulement une fois que vous avez terminé. – LeffelMania

Répondre

3

Vous fermez() votre curseur avant de le renvoyer. D'où il est retourné, vous essayez alors d'appeler moveToFirst(). Cela ne peut pas être fait si le curseur est fermé.

Dans votre méthode getRandomText (String), vous devez renvoyer les données significatives de votre curseur, plutôt que l'objet Cursor lui-même. De cette façon, la méthode qui a créé le curseur peut continuer à fermer le curseur comme il se doit. (Cela devrait juste arriver à la fin de la méthode)

+0

C'est vrai. Je ferai ça, alors. Merci. – Elec0

6
cursor.close(); // in getRandomText() 

après que vous ne pouvez pas obtenir des données à partir du curseur - il est fermé. Retirez cette ligne.