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?
Solutions possibles :
not committed the transactions
vous avez commencé (vous devriez Toujours fermer la transaction une fois que vous avez commencé)Sqlite
(on dirait que vous avez effectué cette étape à partir du code que vous avez posté)db.close
vers finally
db.close
dans une base de données avant de la supprimer avec context.deleteDatabase(...)
, puis de la recréer avec dbHelper.getWritableDatabase()
Faites simplement glisser ce db.close
dans le bloc finally
.
//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();
}
Vous avez probablement oublié de supprimer le break point de débogage Exemple: entrez la description de l'image ici
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é.