2012-04-09 113 views
0

我有一個應用程序與sqlite數據庫。android sqlite數據庫已關閉錯誤

我創建了我自己的數據庫類,它包含一個SqliteDatabase實例。該類實現我的查詢,打開,關閉等(該類不是單身人士)。

我在我的應用程序中有一個活動,一個服務和一個appwidget。

在我需要數據庫的地方,我創建了我的類的一個對象,打開,做些東西,最後關閉。

例如在活動中,我在onStart中打開數據庫並關閉onStop。

除了appwidget,一切都很好。

如果我需要選擇appwidget onUpdate中的數據,那就沒問題。

但是當我嘗試從appwidget執行更新時,出現「數據庫DATABASE_FLE已關閉」錯誤。

它可能是什麼?

我添加了一些日誌,我關閉數據庫,並且這些行的非執行之前執行此錯誤..數據庫應該沒問題。

任何想法?

謝謝。

回答

0

問題是我編譯了一個SQLiteStatment對象並將其保存以備將來使用,同時我的數據庫對象被替換了。 所以SQLiteStatement需要重新編譯一次。

我有這樣的事情:

public void func(SQLiteDatabase db) { 
    if (mStatement == null) 
     mStatement = db.compileStatement(SQL); 

    mStatement.execute(); 

這樣做的問題是,db對象在函數調用改變,而且編譯聲明已經關閉的第一個數據庫對象。

解決方法是刪除if-null,併爲每個db對象編譯語句。

+0

我相信它對於解決您的問題非常重要(以防之前沒有人這樣做),因爲其他開發人員可以從中學習。 – Jviaches 2012-04-10 07:36:42

0

我在想什麼,在這種情況下,android可能會關閉/卸載您的活動(例如,如果設備上留有少量內存,可能會發生這種情況),但是在這段時間內,您的appwidget仍處於活動狀態。

現在,由於您的活動已關閉,因此您的db已關閉。 Appwidget嘗試更新數據庫,但其已關閉。

檢查這種情況,但無論如何,你應該考慮這種情況。 :)

+0

在appwidget onUpdate中,我創建了一個新的數據庫對象並打開數據庫.. SELECT的工作原理..當我嘗試更新時(實際上當我調用一個sql語句對象上的綁定)時,我得到錯誤 – Ran 2012-04-09 17:56:52