Nejsem si jistý, zda používáte SQLiteOpenHelper
správně... nepotřebujete tu myDataBase
myšlenkou je, že za vás spravuje připojení k databázi. Neuvádějte podtřídu tímto způsobem... pokud neděláte věci v onCreate()
atd., které zde nejsou zveřejněny, vypadá to, že stačí použít SQLiteOpenHelper
přímo, tj.:
SQLiteOpenHelper sqlite = new SQLiteOpenHelper(ctx, DB_PATH+DB_NAME, null,
DB_VERSION_NUMBER);
Za předpokladu, že ukončení aktivity by také mělo zastavit vaši úlohu na pozadí, doporučuji zavolat AsyncTask.cancel(true)
z vašeho Activity.onPause()
. Ujistěte se, že je databáze vyčištěna z onCancelled().
A pokud je vaše úloha na pozadí jedinou věcí, která čte databázi, vytvořte ji vlastní instanci SQLiteOpenHelper. Je snadné se dostat do problémů se statickými daty, takže je lepší se jim IMHO vyhnout. Udělal bych něco takového:
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
}
}