web-dev-qa-db-fra.com

Quand fermer le curseur sous Android?

J'ai une application qui utilise le curseur pour sélectionner des données via rawQuery à partir d'un db sqlite pour remplir un ListView dans Android;. Chaque fois que l'utilisateur clique sur un élément de la vue de liste, je crée une nouvelle instance d'activité pour remplir à nouveau la vue de liste. Est-il préférable d'appeler cursor.close() et db.close() pour éviter les problèmes de mémoire? J'ai en fait db.close() dans OnDestroy() de mon activité.

32
Cris

Vous pouvez fermer le cursor une fois que vous avez récupéré les valeurs de cet objet particulier dans votre méthode.

btw ... Il n'est pas nécessaire de recréer un listview à chaque fois pour un événement de clic utilisateur. Informez simplement qu'il y a un changement dans les données de votre adaptateur qui a été défini sur la liste.

Quelque chose comme

youradaptername.notifyDataSetChanged();

Cela devrait repeupler automatiquement le contenu de ur listview.

21
DeRagan

Eh bien, si vous créez une nouvelle instance à chaque fois de la même activité (même si je ne suis pas sûr que ce soit une bonne pratique de programmation). Vous pouvez fermer le curseur dès que vous avez fini de parcourir/itérer à travers la source de la liste.

Exemple:

Un exemple d'implémentation serait quelque chose comme

//Pre cursor code
startManagingCursor(cursor);
if (cursor.moveToFirst()) {
    do {
        if (cursor.getString(0).equals(value)) {
            cursor.close();
            a = true;
            return a;
        }
    } while (cursor.moveToNext());
}

//Close cursor here, when its work is complete
cursor.close();

//Post cursor code ...
6
Muhammad Shahab