我使用cursor.moveToLast()
了,它允许我在数据库关闭后使用游标进行迭代。我不知道这是否是故意的。
但是,似乎 open helper 框架的预期用途是在活动启动时打开数据库,并在活动被销毁时关闭它。
在 onCreate() 内的 AsyncTask 中...
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 或类似的东西。当然,andriod 文档在这方面非常缺乏。但是,请记住,getWriteableDatabase() 每次总是返回相同的缓存引用,除非您关闭它。因此,如果您不顾一切地关闭该引用,后台线程以及其他使用相同数据库的线程,将会死掉。