Tôi đã sử dụng cursor.moveToLast()
và cho phép tôi sử dụng con trỏ để lặp lại sau khi đóng cơ sở dữ liệu. Tôi không có ý tưởng nếu điều này là cố ý.
Tuy nhiên, có vẻ như mục đích sử dụng khung công cụ trợ giúp mở, là mở db khi khởi động hoạt động và đóng nó khi Activity bị hủy.
Trong một AsyncTask từ bên trong onCreate() ...
new StartupTask().execute();
Các AsyncTask Thread.sleep() dưới đây là chỉ để cho đủ thời gian để hiển thị hộp thoại để bạn có thể nhìn thấy nó làm việc. Rõ ràng là lấy ra khi bạn chơi xong. ;)
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();
}
}
trong onDestroy() ... openHelper.close();
Nếu không, bạn sẽ không thể sử dụng Android SimpleCursorAdapter hoặc bất kỳ thứ gì như thế. Tất nhiên các tài liệu andriod rất thiếu trong lĩnh vực này.Nhưng, hãy nhớ, getWriteableDatabase() luôn trả về cùng một tham chiếu được lưu trong bộ nhớ cache, mỗi lần, trừ khi bạn đóng nó lại. Vì vậy, nếu bạn đi đóng mà tham khảo willy-nilly, chủ đề nền và những gì không, đang sử dụng cùng một cơ sở dữ liệu, S W chết.
Nguồn
2011-11-11 05:08:48