Meine Bewerbung gibt mir diese Warnung
Ein SQLiteConnection-Objekt für die Datenbank '+ data + data + com_example_test + database' ist gelaufen! Bitte repariere Ihre Anwendung, um laufende Transaktionen ordnungsgemäß zu beenden und zu schließen die Datenbank, wenn sie nicht mehr benötigt wird.
Aber ich schließe das DB-Objekt und den Cursor nach jeder Verwendung.
try {
while (cursor.moveToNext()) {
...
}
} finally {
if (cursor != null && !cursor.isClosed())
cursor.close();
}
...
db.close();
Kannst du mir helfen zu verstehen, was das Problem ist? Danke !!!
UPDATE! Ich versuche diese Lösung aus diesem Beitrag heraus SQLite-Verbindung ist durchgesickert, obwohl alles geschlossen wurde
und ich habe keinen Speicherleck mehr, ist es eine gute Lösung?
Mögliche Lösungen :
not committed the transactions
begonnen, den Sie gestartet haben (Sie sollten Die Transaktion immer abschließen, wenn Sie begonnen haben)Sqlite
verwenden.db.close
in den finally
-Blockdb.close
in einer Datenbank nicht aufgerufen, bevor Sie sie mit context.deleteDatabase(...)
löschen und anschließend mit dbHelper.getWritableDatabase()
erneut erstellen.Ziehen Sie den db.close
einfach in den finally
-Block.
//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();
}
Wahrscheinlich haben Sie vergessen, den breakpoint des Debugging zu entfernen Sample: Geben Sie die Bildbeschreibung hier ein
In meinem Fall wurde der Fehler verursacht, wenn Sie versuchen, neue Daten herunterzuladen, und die Datenbank sollte aktualisiert werden.
Ich löste es, die Datenbank durch Aufruf eines SELECT 0
zu instanziieren. Da die Datenbank aktualisiert wurde, versuche ich danach, die neuen Daten herunterzuladen. Und hat gut funktioniert.