Er ikke sikker på, at du bruger SQLiteOpenHelper
korrekt... du behøver ikke den myDataBase
felt, er ideen, at den administrerer din databaseforbindelse for dig. Underklasser ikke på den måde... medmindre du gør ting i onCreate()
osv., der ikke er postet her, ser det ud til, at du bare kan bruge SQLiteOpenHelper
direkte, dvs.:
SQLiteOpenHelper sqlite = new SQLiteOpenHelper(ctx, DB_PATH+DB_NAME, null,
DB_VERSION_NUMBER);
Forudsat at afslutning af aktiviteten også skulle stoppe din baggrundsopgave, vil jeg anbefale at kalde AsyncTask.cancel(true)
fra din Activity.onPause()
. Sørg for, at databasen er ryddet op fra onCancelled().
Og hvis din baggrundsopgave er det eneste, der læser databasen, så lad den eje SQLiteOpenHelper-instansen. Det er nemt at komme i problemer med statiske data, så det er bedst at undgå IMHO. Jeg ville gøre sådan noget:
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
}
}