मैंने cursor.moveToLast()
का उपयोग किया, और यह मुझे डेटाबेस बंद होने के बाद कर्सर का उपयोग करने की अनुमति देता है। मुझे कोई जानकारी नहीं है कि यह जानबूझकर है।
हालांकि, ऐसा लगता है कि खुले सहायक ढांचे का इच्छित उपयोग, गतिविधि शुरू करने पर डीबी खोलना है, और गतिविधि को नष्ट होने पर इसे बंद करना है।
एक AsyncTask में OnCreate() के भीतर से ...
new StartupTask().execute();
AsyncTask Thread.Sleep() नीचे सिर्फ संवाद को दिखाने के लिए इतना है कि आप यह काम देख सकते हैं के लिए पर्याप्त समय दे रहा है। जब आप खेल रहे हों तो स्पष्ट रूप से इसे बाहर निकालें। ;)
private class StartupTask extends AsyncTask
{
private ProgressDialog progressDialog;
@Override
protected Object doInBackground(final Object... objects)
{
openHelperRef.getWritableDatabase();
try
{
Thread.sleep(5000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
return null;
}
@Override
protected void onPreExecute()
{
super.onPreExecute();
runOnUiThread(new Runnable()
{
public void run()
{
progressDialog = ProgressDialog.show(
MyActivity.this, "Title",
"Opening/Upgrading the database, please wait", true);
}
});
}
@Override
protected void onPostExecute(Object object)
{
super.onPostExecute(object);
progressDialog.dismiss();
}
}
OnDestroy() में
... openHelper.close();
अन्यथा, आप एंड्रॉइड SimpleCursorAdapter, या उसके जैसा कुछ भी उपयोग करने में सक्षम नहीं होंगे। निश्चित रूप से इस संबंध में एंड्रॉइड दस्तावेज़ों की बहुत कमी है।लेकिन, याद रखें, GetWriteableDatabase() हमेशा एक ही कैश संदर्भ देता है, हर बार, जब तक आप इसे बंद नहीं करते। इसलिए, यदि आप उस संदर्भ को बंद कर देते हैं, तो पृष्ठभूमि धागे और क्या नहीं, जो एक ही डेटाबेस का उपयोग कर रहे हैं, मर जाएंगे।
स्रोत
2011-11-11 05:08:48