2011-08-19 114 views
0

我有一個應用程序從數據庫表中讀取值(數據庫名爲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(),因爲我想控制數據庫的打開和關閉。

回答

1

這是正常的,因爲這兩種方法都執行......只是這樣做的兩種方法(onDestroyonStop):

if(lectures.isOpen()){ 
    lectures.close(); 
} 

雖然我覺得你可以把一個.close invokation在其中的一個。確保在SoftCopyDatabase類中創建isOpen方法,該方法必須調用SqliteDatabase對象的isOpen方法。

+0

hmm..ok ...我會添加它。但是,當我已經包含了創建DataBase的新時刻的onRestart()方法時,爲什麼在返回到此Activity時未創建Database,以及爲什麼會顯示此錯誤? –

+0

首先:爲什麼顯示錯誤?當您嘗試對數據庫執行某些操作(訪問或關閉數據庫)時會顯示此消息,但它已關閉。簡單,呃?關於'onRestart',在這裏進行初始化是個不錯的主意。 'onRestart'總是在'onCreate'後面調用的,所以你要創建這個類的兩個實例:http://developer.android.com/reference/android/app/Activity.html – Cristian

+0

Ahan,我明白你的觀點。實際上,在我的應用程序的稍後部分中,顯示已經打開dataBase的錯誤是顯示的。爲了解決這個錯誤,我使用了onStop並關閉了數據庫。這解決了數據庫已經打開的錯誤,但介紹了這一點。 我真的想知道的是,有一種方法可以讓我在返回到此活動後立即重新打開數據庫。 –