Je ne suis pas sûr que vous utilisez SQLiteOpenHelper
correctement... vous n'avez pas besoin de cette myDataBase
domaine, l'idée est qu'il gère votre connexion à la base de données pour vous. Ne sous-classez pas de cette façon... sauf si vous faites des choses dans onCreate()
etc qui ne sont pas publiés ici, il semble que vous puissiez simplement utiliser SQLiteOpenHelper
directement, c'est-à-dire :
SQLiteOpenHelper sqlite = new SQLiteOpenHelper(ctx, DB_PATH+DB_NAME, null,
DB_VERSION_NUMBER);
En supposant que la fin de l'activité devrait également arrêter votre tâche en arrière-plan, je vous recommande d'appeler AsyncTask.cancel(true)
depuis votre Activity.onPause()
. Assurez-vous que la base de données est nettoyée de onCancelled().
Et si votre tâche en arrière-plan est la seule chose à lire la base de données, faites en sorte qu'elle possède l'instance SQLiteOpenHelper. Il est facile d'avoir des ennuis avec des données statiques, il vaut donc mieux éviter à mon humble avis. Je ferais quelque chose comme ça :
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
}
}