web-dev-qa-db-fra.com

Un objet SQLiteConnection pour la base de données a été divulgué! S'il vous plaît corriger votre application

Mon application me donne cet avertissement

Un objet SQLiteConnection pour la base de données '+ data + data + com_example_test + database' a été divulgué! S'il-vous-plaît, réparez votre application pour terminer correctement les transactions en cours et fermer la base de données quand il n'est plus nécessaire.

Mais je ferme l'objet db et le curseur après chaque utilisation.

        try {
            while (cursor.moveToNext()) {
              ...
            }
        } finally {
            if (cursor != null && !cursor.isClosed())
                cursor.close();
        }

...
    db.close();

Pouvez-vous m'aider à comprendre quel est le problème? Merci !!!

METTRE À JOUR! J'essaie cette solution depuis ce post SQLite Connection a fui bien que tout soit fermé

et je n'ai plus de fuite de mémoire, est-ce une bonne solution?

38
user3906040

Solutions possibles

  • Vous avez not committed the transactions vous avez commencé (vous devriez Toujours fermer la transaction une fois que vous avez commencé)
  • Vérifiez si vous avez fermé les curseurs que vous avez ouverts si vous êtes En utilisant Sqlite (on dirait que vous avez effectué cette étape à partir du code que vous avez posté)
  • Déplacez également le bloc db.close vers finally
  • Vous n'avez pas appelé db.close dans une base de données avant de la supprimer avec context.deleteDatabase(...), puis de la recréer avec dbHelper.getWritableDatabase()
26
Devrath

Faites simplement glisser ce db.close dans le bloc finally.

7
G. Blake Meike
//Inside your SQLite helper class
@Override
public synchronized void close () {
    if (db != null) {
        db.close();
        super.close();
    }
}

//Inside the activity that makes a connection to the helper class
@Override
protected void onDestroy () {
    super.onDestroy();
    //call close() of the helper class
    dbHelper.close();
}
1
Ave Maria

Vous avez probablement oublié de supprimer le break point de débogage Exemple: entrez la description de l'image ici

0
steve Rogers

Dans mon cas, l'erreur a été provoquée lorsque vous essayez de télécharger de nouvelles données et que la base de données doit être mise à jour.

Je l'ai résolu en instanciant la base de données en appelant un SELECT 0. Cette base de données étant mise à jour, j'essaie ensuite de télécharger les nouvelles données. Et a bien fonctionné.

0
IgniteCoders