我有一個應用程序從數據庫表中讀取值(數據庫名爲SoftCopyDatabase),並使用從數據庫讀取的值填充List。在點擊列表中的一個項目時,新的活動開始。活動生命週期和數據庫
問題是,當我按下返回鍵我得到一個錯誤
IllegalStateException: database already closed
我的代碼如下:
公共類OpenClick擴展ListActivity {
public static String subjectName;
private SoftCopyDatabase lectures;
private static int[] subTO = { R.id.subject };
private static String[] subFROM = { SUBJECT };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
lectures = new SoftCopyDatabase(this);
}
public void onStart() {
super.onStart();
try {
Cursor cursor = getSubjects();
showSubjects(cursor);
} catch (Exception e) {
e.printStackTrace();
}
}
public void onRestart() {
super.onRestart();
lectures = new SoftCopyDatabase(this);
}
public void onStop() {
super.onStop();
lectures.close();
}
public void onDestroy() {
super.onDestroy();
lectures.close();
}
//remaining code....
}
我想提的一點是,如果我刪除onStop()方法的應用程序重刑工作正常。但是我必須包含onstop(),因爲我想控制數據庫的打開和關閉。
hmm..ok ...我會添加它。但是,當我已經包含了創建DataBase的新時刻的onRestart()方法時,爲什麼在返回到此Activity時未創建Database,以及爲什麼會顯示此錯誤? –
首先:爲什麼顯示錯誤?當您嘗試對數據庫執行某些操作(訪問或關閉數據庫)時會顯示此消息,但它已關閉。簡單,呃?關於'onRestart',在這裏進行初始化是個不錯的主意。 'onRestart'總是在'onCreate'後面調用的,所以你要創建這個類的兩個實例:http://developer.android.com/reference/android/app/Activity.html – Cristian
Ahan,我明白你的觀點。實際上,在我的應用程序的稍後部分中,顯示已經打開dataBase的錯誤是顯示的。爲了解決這個錯誤,我使用了onStop並關閉了數據庫。這解決了數據庫已經打開的錯誤,但介紹了這一點。 我真的想知道的是,有一種方法可以讓我在返回到此活動後立即重新打開數據庫。 –