sql >> Databasteknik >  >> RDS >> SQLite

SQLite-databasläcka hittades

Jag är inte säker på att du använder SQLiteOpenHelper korrekt... du behöver inte den myDataBase fältet är tanken att den hanterar din databasanslutning åt dig. Underklass inte på det sättet... om du inte gör saker i onCreate() etc som inte läggs upp här det ser ut som att du bara kan använda SQLiteOpenHelper direkt, dvs:

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

Om du antar att avslutandet av aktiviteten också bör stoppa din bakgrundsuppgift, rekommenderar jag att du anropar AsyncTask.cancel(true) från din Activity.onPause() . Se till att databasen rensas från onCancelled().

Och om din bakgrundsuppgift är det enda som läser databasen, låt den äga SQLiteOpenHelper-instansen. Det är lätt att få problem med statisk data, så det är bäst att undvika IMHO. Jag skulle göra något sånt här:

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
    }
}


  1. Oracle Datatyper

  2. SQLite JSON_PATCH()

  3. Syftet med att använda olika typer av PL/SQL-samlingar i Oracle

  4. Hur man får de senaste 3 månadernas försäljningsdata i MySQL