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