Ho utilizzato cursor.moveToLast()
e mi ha consentito di utilizzare il cursore per l'iterazione dopo la chiusura del database. Non ho idea se questo è intenzionale.
Tuttavia, sembra che l'uso previsto del framework di helper aperto sia quello di aprire il db all'avvio dell'attività e chiuderlo quando l'attività viene distrutta.
In un AsyncTask dall'interno onCreate() ...
new StartupTask().execute();
L'AsyncTask Thread.sleep() di seguito è solo per dare il tempo sufficiente per mostrare la finestra di dialogo in modo che si può vedere il lavoro. Ovviamente prendilo quando hai finito di giocare. ;)
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();
}
}
in OnDestroy() ... openHelper.close();
In caso contrario, non sarà possibile utilizzare Android SimpleCursorAdapter o qualcosa di simile. Naturalmente i documenti di andriod sono molto carenti in questo senso.Ma, ricorda, getWriteableDatabase() restituisce sempre lo stesso riferimento memorizzato nella cache, ogni volta, a meno che non lo si chiuda. Quindi, se vai a chiudere quel riferimento, volenti o nolenti, thread in background e cosa no, che stanno usando lo stesso database, morirà.
fonte
2011-11-11 05:08:48