Usé cursor.moveToLast()
, y me permitió usar el cursor para la iteración después del cierre de la base de datos. No tengo idea si esto es intencional.
Sin embargo, parece que el uso previsto del marco de ayuda abierto es abrir el archivo db en el inicio de la actividad y cerrarlo cuando se destruye la actividad.
En una AsyncTask desde dentro onCreate() ...
new StartupTask().execute();
El AsyncTask Thread.sleep() A continuación es solo para dar tiempo suficiente para mostrar el cuadro de diálogo para que pueda ver cómo funciona. Obviamente, sáquelo cuando termine de jugar. ;)
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();
}
}
en OnDestroy() ... openHelper.close();
De lo contrario, no podrá usar Android SimpleCursorAdapter, ni nada de eso. Por supuesto, los documentos de andriod son muy escasos en este sentido.Pero, recuerde, getWriteableDatabase() siempre devuelve la misma referencia en caché, cada vez, a menos que la haya cerrado. Entonces, si va a cerrar esa referencia de cualquier manera, los hilos de fondo y lo que no, que están usando la misma base de datos, morirá.