Я использовал 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 ();
В противном случае вы не сможете использовать Android SimpleCursorAdapter или что-либо подобное.Конечно, в Андриод документах очень не хватает в этом отношении.Но помните, что getWriteableDatabase () всегда возвращает одну и ту же кэшированную ссылку каждый раз, если вы ее не закрыли.Так что, если вы закрываете эту ссылку волей-неволей, фоновые потоки, а что нет, которые используют ту же базу данных, умрут.