を使用cursor.moveToLast()
しましたが、データベースを閉じた後の反復にカーソルを使用できました。これが意図的なものかどうかはわかりません。
ただし、オープン ヘルパー フレームワークの使用目的は、アクティビティの開始時にデータベースを開き、アクティビティが破棄されたときにデータベースを閉じることです。
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() は、閉じない限り、常に同じキャッシュされた参照を毎回返すことに注意してください。そのため、同じデータベースを使用しているバックグラウンド スレッドなどの参照を勝手に閉じると、死んでしまいます。