SQLite
 sql >> Datenbank >  >> RDS >> SQLite

SQLite-Datenbankleck gefunden

Ich bin mir nicht sicher, ob Sie SQLiteOpenHelper verwenden richtig ... Sie brauchen diese myDataBase nicht Feld, die Idee ist, dass es Ihre Datenbankverbindung für Sie verwaltet. Machen Sie keine Unterklassen auf diese Weise ... es sei denn, Sie machen Dinge in onCreate() usw., die hier nicht gepostet werden, sieht es so aus, als könnten Sie einfach SQLiteOpenHelper verwenden direkt, also:

SQLiteOpenHelper sqlite = new SQLiteOpenHelper(ctx, DB_PATH+DB_NAME, null,
    DB_VERSION_NUMBER);

Unter der Annahme, dass das Beenden der Aktivität auch Ihre Hintergrundaufgabe beenden sollte, würde ich empfehlen, AsyncTask.cancel(true) aufzurufen aus Ihrer Activity.onPause() . Stellen Sie sicher, dass die Datenbank von onCancelled() bereinigt wird.

Und wenn Ihre Hintergrundaufgabe das einzige ist, was die Datenbank liest, machen Sie sie zum Eigentümer der SQLiteOpenHelper-Instanz. Es ist leicht, mit statischen Daten in Schwierigkeiten zu geraten, daher ist es meiner Meinung nach am besten, sie zu vermeiden. Ich würde so etwas tun:

protected class BackTask extends AsyncTask<String, Integer, String>
{
    private SQLiteOpenHelper sqlite;

    public void BackTask(Context ctx) {
        sqlite = new SQLiteOpenHelper(ctx, DB_PATH+DB_NAME, null,
                                      DB_VERSION_NUMBER);
    }
    @Override
    protected String doInBackground(String... params) 
    {
         try {
                //get requeste data from the database
                //access the web service
                return result;

              } catch (Exception e) { 
         }
         return null;
    }

    @Override
    protected void onCancelled() {
         sqlite.close();
    }

    @Override
    protected void onPostExecute(String result)
         sqlite.close();
         // Update UI here
    }
}