मुझे यकीन नहीं है कि आप SQLiteOpenHelper
का उपयोग कर रहे हैं ठीक से... आपको इसकी आवश्यकता नहीं है myDataBase
फ़ील्ड, विचार यह है कि यह आपके लिए आपके डेटाबेस कनेक्शन का प्रबंधन करता है। इस तरह से उपवर्ग न करें... जब तक कि आप onCreate()
. में काम नहीं कर रहे हैं आदि जो यहां पोस्ट नहीं किए गए हैं, ऐसा लगता है कि आप बस SQLiteOpenHelper
. का उपयोग कर सकते हैं सीधे, यानी:
SQLiteOpenHelper sqlite = new SQLiteOpenHelper(ctx, DB_PATH+DB_NAME, null,
DB_VERSION_NUMBER);
यह मानते हुए कि गतिविधि समाप्त करने से आपका पृष्ठभूमि कार्य भी रुक जाएगा, मैं AsyncTask.cancel(true)
पर कॉल करने की अनुशंसा करता हूं आपके Activity.onPause()
. से . सुनिश्चित करें कि डेटाबेस को रद्द () से साफ किया गया है।
और यदि आपका पृष्ठभूमि कार्य डेटाबेस को पढ़ने वाली एकमात्र चीज है तो इसे SQLiteOpenHelper इंस्टेंस बनाएं। स्थिर डेटा के साथ परेशानी में पड़ना आसान है, इसलिए IMHO से बचना सबसे अच्छा है। मैं कुछ इस तरह करूँगा:
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
}
}