Ik weet niet zeker of je SQLiteOpenHelper
gebruikt correct... je hebt die myDataBase
niet nodig veld, is het de bedoeling dat het uw databaseverbinding voor u beheert. Subclasseer niet op die manier... tenzij je dingen doet in onCreate()
enz. die hier niet zijn gepost, lijkt het alsof je gewoon SQLiteOpenHelper
kunt gebruiken rechtstreeks, d.w.z.:
SQLiteOpenHelper sqlite = new SQLiteOpenHelper(ctx, DB_PATH+DB_NAME, null,
DB_VERSION_NUMBER);
Ervan uitgaande dat het beëindigen van de activiteit ook uw achtergrondtaak moet stoppen, raad ik aan om AsyncTask.cancel(true)
te bellen. van uw Activity.onPause()
. Zorg ervoor dat de database is opgeschoond vanuit onCancelled().
En als uw achtergrondtaak het enige is dat de database leest, maak deze dan eigenaar van de SQLiteOpenHelper-instantie. Het is gemakkelijk om in de problemen te komen met statische gegevens, dus IMHO kunt u dit het beste vermijden. Ik zou zoiets als dit doen:
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
}
}