SQLite-Verbindungsobjekt ausgelaufen – Android

Ich mache meine erste Android-App, und ich nahm einige sqlite Tutorials zuerst, dass lehrte mich, einen DatenbankHelper verwenden, der SQLiteOpenHelper erweitert. Also mein DatenbankHelper verlängert SQLiteOpenHelper. Ich bekomme eine sqlite Verbindung Leckwarnung in der Logcat so möchte einige Ratschläge, was zu tun, um das zu beheben.

Ich bekomme diesen Fehler:

  • Android Absicht zum Senden von E-Mails mit Anhang
  • Wie schalte ich das Blitzlicht programmgesteuert in Android ein?
  • Google Kalender API OAuth2 Probleme auf Android Honeycomb
  • Schalten Sie das Android-Gerät aus
  • Wiederherstellen des Aktivitätslayouts zum Abspielen von Videos im Vollbildmodus, wenn der Bildschirm gedreht wird
  • Verwenden von Gradle, um externe Bibliotheken in getrennten Dex-Dateien zu teilen, um Android Dalvik 64k Methoden zu beheben
  • 02-01 21:39:50.740: W/SQLiteConnectionPool(32061): A SQLiteConnection object for database '/data/data/com.btf271.fashionassistant/databases/clothingManager' was leaked! Please fix your application to end transactions in progress properly and to close the database when it is no longer needed. 

    Meine DatenbankHelper-Funktionen, die aufgerufen werden, wo das Leck auftritt:

      public List<Sticker> getObjectsByGenderAndCategory(String gender, String category) { List<Sticker> objects = new ArrayList<Object>(); String selectQuery = String.format( "SELECT * FROM %s WHERE %s = \"%s\" AND %s = \"%s\"", TABLE_OBJECT, KEY_GENDER, gender, KEY_CATEGORY, category); Log.e(LOG, selectQuery); SQLiteDatabase db = this.getReadableDatabase(); Cursor c = db.rawQuery(selectQuery, null); try{ // looping through all rows and adding to list if (c.moveToFirst()) { do { Object o = createClothingItemJavaObject(c); // adding to object list objects.add(o); } while (c.moveToNext()); } }finally { c.close(); db.close(); } return objects; } 

    Ich habe das gefunden, was ich morgen versuchen werde. Es ist spät .

    Vielen Dank.

  • Html formatierten text in android app anzeigen
  • Wie deaktiviert man eine Schaltfläche innerhalb eines AlertDialogs?
  • Wurde requestCode in PendingIntent wurde immer unterstützt?
  • GetIntent () Extras immer NULL
  • Eclipse Bug mit neun Patch-Dateien?
  • Fragmentinhalt überlagert die Toolbar
  • 4 Solutions collect form web for “SQLite-Verbindungsobjekt ausgelaufen – Android”

    Alles, was ich tat, war die Umsetzung dieser Antwort auf eine ähnliche Frage und jetzt zeigt es nicht die SQL-Verbindung Objekt Leck Fehler. Ich kann das nicht genug empfehlen. Es dauerte nur ein paar Minuten, um zu implementieren und zu arbeiten.

    Hier ist der Code:

     public class DatabaseHelper extends SQLiteOpenHelper { private static DatabaseHelper mInstance = null; private static final String DATABASE_NAME = "database_name"; private static final String DATABASE_TABLE = "table_name"; private static final int DATABASE_VERSION = 1; public static DatabaseHelper getInstance(Context ctx) { // Use the application context, which will ensure that you // don't accidentally leak an Activity's context. // See this article for more information: http://bit.ly/6LRzfx if (mInstance == null) { mInstance = new DatabaseHelper(ctx.getApplicationContext()); } return mInstance; } /** * Constructor should be private to prevent direct instantiation. * make call to static factory method "getInstance()" instead. */ private DatabaseHelper(Context ctx) { super(ctx, DATABASE_NAME, null, DATABASE_VERSION); } } 

    Ich habe dies durch Hinzufügen

     @Override protected void finalize() throws Throwable { this.close(); super.finalize(); } 

    Zu meiner erweiterten erweiterten Klasse von SQLiteOpenHelper

    getReadableDatabase() jeden Aufruf von getReadableDatabase() und getWritableDatabase() zu einem entsprechenden close() auf demselben Datenbankobjekt aus.

    Zum Beispiel, Ihre getAllClothingItemsByGenderAndCategory() Anrufe getReadableDatabase() aber nicht close() it. db.close() nach c.close() .

    Ihr closeDB() macht keinen Sinn, da es einen neuen Verweis auf die Datenbank mit getReadableDatabase() bekommt und schließt genau das . Es tut nichts, um eine bestehende Datenbankverbindung zu schließen.

    Jedes Mal, wenn Sie eine Datenbank (lesbar oder beschreibbar) öffnen und der Cursor, der Speicherressourcen verwendet, muss mit ".close ();" Nach seiner Nutzung endet in jeder Datenbankfunktion .. durch your_database object.close (); Und Cursor object.close ();

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.