Versuchen, ein bereits geschlossenes Objekt erneut zu öffnen: SQLiteDatabase:

Ich versuche, etwas aus einer Datenbank zu löschen und dann einen neuen Wert einzufügen. Ich weiß nicht viel über Datenbanken, so würde schätzen Ratschläge, was hier falsch geht.

Ich bekomme immer folgende Fehlermeldung:

  • Was ist avg. Optimale Verbindungszeitüberschreitung für mobile App?
  • Doppelter Parameter mit 2 Ziffern nach Punkt in Strings.xml?
  • NullPointerException in onCreate () bei Verwendung von findViewById - setContentView wird vorher verwendet?
  • Unterschied zwischen <support-screens> und <compatible-screens> auf Android
  • Android - Wie man eine benannte Methode in button.setOnClickListener ()
  • Android Wie man Bottom Sheet von Material Design Docs implementiert
  • Caused by: java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase: 

    Das heißt aus einer asynchronen Aufgabe, funktioniert das erste Mal gut, bricht aber das zweite Mal, dass die Aufgabe ausgelöst wird.

    Hier sind die wichtigen Ausschnitte:

      public void removeAndInsert(String configRaw) { SQLiteDatabase sqlite = null; try { sqlite = dbHelper.getWritableDatabase(); removeAndInsert(configRaw, sqlite); ..... finally { if (sqlite != null) { sqlite.close(); } } void removeAndInsert(String configRaw, SQLiteDatabase sqlite) throws SQLException { ContentValues initialValues = new ContentValues(); initialValues.put(DBOpenHelper.CONFIG_CACHE_RAW_DATA, configRaw); sqlite.delete(DBOpenHelper.CONFIG_CACHE_TABLE_NAME, null, null); sqlite.insert(DBOpenHelper.CONFIG_CACHE_TABLE_NAME, null, initialValues); } 

  • Android 6.0 offen fehlgeschlagen: EACCES (Permission denied)
  • Fehlertext in TextInputLayout wird von der Tastatur abgedeckt
  • UML-Diagramm in Android Studio generieren
  • Error 'ionic run Android' auf Gerät
  • Warum wird Wert von Wert-mdpi genommen, wenn ich mit Galaxy Nexus arbeite
  • Erkennung, ob neue Installation oder aktualisierte Version (Android App)
  • 3 Solutions collect form web for “Versuchen, ein bereits geschlossenes Objekt erneut zu öffnen: SQLiteDatabase:”

    Versuche dies.

     public void removeAndInsert(String configRaw) { SQLiteDatabase sqlite = null; try { sqlite = dbHelper.getWritableDatabase(); synchronized(sqlite) { removeAndInsert(configRaw, sqlite); } ..... finally { if (sqlite != null && sqlite.isOpen()) { sqlite.close(); } } void removeAndInsert(String configRaw, SQLiteDatabase sqlite) throws SQLException { ContentValues initialValues = new ContentValues(); initialValues.put(DBOpenHelper.CONFIG_CACHE_RAW_DATA, configRaw); sqlite.delete(DBOpenHelper.CONFIG_CACHE_TABLE_NAME, null, null); sqlite.insert(DBOpenHelper.CONFIG_CACHE_TABLE_NAME, null, initialValues); } 

    Es sieht so aus, als ob du eine SQLiteOpenHelper-Instanz ( dbHelper ) irgendwo dbHelper und eine beschreibbare Datenbank davon dbHelper ( sqlite ), aber dann schließt man die Datenbank. Wenn dies der letzte (oder nur) Datenbankreferenz ist, der geöffnet ist, wird die gesamte Datenbank geschlossen, wenn Sie sqlite.close() aufrufen.

    Sie können den Anruf zu sqlite.close() in removeAndInsert() sicher entfernen. Wenn Ihre AsyncTask mit ihrer Datenbankarbeit AsyncTask ist, rufen Sie dbHelper.close() auf, um alle baumelnden Datenbankreferenzen aufzuräumen.

    Versuchen, sqlite.close(); zu ersetzen sqlite.close(); Mit dbHelper.close();

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