Android : Dieser Vorgang kann nicht ausgeführt werden, da der Verbindungspool wurde geschlossen

? Ferran Negre @ | Original: StackOverFlow
---

Ich wurde durch Stackoverflow Lesen über diese Frage und ich habe immer noch keine Lösung gefunden . Ich merke, dass manchmal, meine app wirft diese Fehlermeldung:

   java.lang.IllegalStateException: Cannot perform this operation because the connection pool has been closed.
        at android.database.sqlite.SQLiteConnectionPool.throwIfClosedLocked(SQLiteConnectionPool.java:962)
        at android.database.sqlite.SQLiteConnectionPool.waitForConnection(SQLiteConnectionPool.java:599)
        at android.database.sqlite.SQLiteConnectionPool.acquireConnection(SQLiteConnectionPool.java:348)
        at android.database.sqlite.SQLiteSession.acquireConnection(SQLiteSession.java:894)
        ...

Ich habe eine Datei mit dem Namen DatabaseHelper.java mit diesem Ansatz, um eine Instanz zu bekommen :

public static DatabaseHelper getInstance(Context context) {
    if (mInstance == null) {
        mInstance = new DatabaseHelper(context.getApplicationContext());
    }
    return mInstance;
}

Dann habe ich Methoden wie diese (, dass es in der Linie cursor.moveToFirst () mit diesem Fehler abgestürzt ) . Er stürzt fast nie, aber manchmal ist es nicht .

public Profile getProfile(long id) {
    SQLiteDatabase db = this.getReadableDatabase();

    String selectQuery = "SELECT * FROM " + TABLE_PROFILES + " WHERE " + KEY_PROFILES_ID + " = " + id;
    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    Profile profile = new Profile();
    if (cursor.moveToFirst()) {
        doWhatEver();
    }
    cursor.close();
    db.close();

    return profile;
}

Das ist es also, bei allen Methoden, die ich verwenden :

SQLiteDatabase db = this.getReadableDatabase(); (or Writable)

Und dann habe ich in der Nähe des Cursors und der db. In diesem Fall wurde der Fehler zu werfen in der Zeile :

cursor.moveToFirst();

Ich sehe nicht, warum der Fehler, sagt der db ist geschlossen, wenn ich rufe this.getReadableDatabase () vor . Bitte unterstützen Sie ! Danke :)

---

Top 5 Antwort

1AmmarCSE @

Try removing

db.close();

Wenn Sie einen anderen Betrieb nach dem Schließen der Datenbank versuchen, es wird Ihnen diese Ausnahme .

Die http://developer.android.com/reference/android/database/sqlite/SQLiteClosable.html#close%28%29 sagt :

Gibt einen Verweis auf das Objekt, das Objekt zu schließen ...

Überprüfen Sie auch,  http://stackoverflow.com/questions/14002022/android-sq-lite-closed-exception

2Mark @

Ich habe das gleiche Problem, nicht in der Lage, es zu beheben . Ich habe eine mögliche Spur gefunden: Ich habe einen Sync -Thread, die ganze Zeit ausgeführt wird:

    Item ii = dbHelper.popPendingUpload();
    if (ii != null)
            upload(ii);

Und innerhalb DBHelper

public Item popPendingUpload() {

    SQLiteDatabase db = getReadableDatabase();
    Cursor res = db
            .rawQuery("SELECT * FROM items WHERE state = 0 LIMIT 1",
                    new String[] {});
    boolean hasNext = res.moveToFirst();
    Item ii = null;
    if (hasNext) {
        ii = //load item
    }
    db.close();
    return ii;
}

Der Fehler zeigt sich auch in der moveToFirst () -Methode . Da der Faden poping Artikel in einer Endlos-Schleife, das erste Mal, es funktioniert ok, das zweite Mal der Fehler angezeigt wird. Der interessante Teil ist, dass, wenn ich einen Haltepunkt und Schritt durch den Code, der Fehler nicht mehr zu zeigen. Ich teste auf einem echten Gerät mit Android 4.1.

Ich weiß, ist keine Antwort, aber es kann helfen . Ich werde auf Tests zu halten.