2011-09-01 45 views
0

我已經越來越此異常,DatabaseObjectNotClosedException:如何解決這個異常?

close() was never explicitly called on database '/data/data/com.project.test/databases/database' 
E/SQLiteDatabase(13921): android.database.sqlite.DatabaseObjectNotClosedException:   
Application did not close the cursor or database object that was opened here 

我試圖關閉數據庫助手和遊標,但我會得到運行時異常。當我離開活動並在點擊後退按鈕後重新訪問它時,會發生這種情況。

如何正確關閉我的遊標和助手?

我已經嘗試了兩種方法:

首先,關閉遊標每一個人使用後,在onPause和關閉數據庫幫手。

秒,隨着數據庫幫助關閉遊標onpause,但都沒有奏效。

有人可以幫助我嗎?

編輯:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    activity = this.getActivity(); 
    context = this.getActivity().getApplicationContext(); 
    layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    mDbHelper = new DatabaseHelper(context); 
    mDbHelper.open(); 
    populateList(); 
} 

public void populateList() { 
    directoryCursor = mDbHelper.fetchAllRootDirectories(); 
    activity.startManagingCursor(directoryCursor); 

    adapter = new DirectoryListAdapter(this.getActivity(), directoryCursor); 
    this.setListAdapter(adapter); 
} 

       ...... 


private UpdateDatabaseListener updateDatabaseListener = new UpdateDatabaseListener() { 

    public void onUpdate(int from, int to) { 

       ..... 

     findExistingRecordCursor = mDbHelper.findExistingRecords(from, to); 
     activity.startManagingCursor(findExistingRecordCursor); 
     if(findExistingRecordCursor.getCount() == 0) { 

       .... 

      } 

    } 
} 

我在OnCreate()函數打開的數據庫幫手。 填充列表視圖時使用的遊標, 用於查找現有記錄的遊標, 遊標以獲取信息。


UPDATE:

我試圖關閉的onPause和的onDestroy,但它仍然與RuntimeException的崩潰。

+1

能否請您發佈您的代碼 – Gaurav

+0

@Gaurav這部分的代碼,你真正需要看到的?因爲它確實有很多代碼。我可以看到我可以粘貼什麼。 –

+0

@Gaurav我寫下我在那裏用databasehelper和遊標 –

回答

0

是否關閉SQLiteDatabase對象?如果不嘗試關閉SQLiteDatabase對象這樣

  1. SQLiteDatabase DB = SQLiteHelper classobject.getWriteableDatabase();

  2. //的代碼塊

  3. db.close();

並運行您的應用程序。

請問您可以發佈您的代碼,以便更好地瞭解您的問題。

+0

感謝您的回覆,我在問題中添加了一些信息。我試着在onPause()方法上關閉我的光標。當我離開另一個活動並點擊後退按鈕時。它會引發一個運行時異常。 –

+0

如果我不收的話,那就不會有比其他DatabaseObjectNotClosedException任何問題。 –

+0

儘量把datbase助手在主活動類轉移到延伸SQLiteOpenHelper一個新的活動,然後實例化SQLiteHelper。這是我的想法,但我不確定它是否會起作用。 – Rocker

0

對不起,延遲迴復。 () 從我看到的,你已經打開db使用 mDbHelpher.open() 之後,你確實populatelist() 你嘗試之後做mDbHelpher.close()?

與光標相同的東西。因爲你的錯誤清楚地表明數據庫或光標處於打開狀態。 只要你完成使用數據庫,你應該關閉。即使在您訪問其他活動並按下返回按鈕後,這也不應該出現問題。

此外,你說你關閉數據庫或光標時得到運行時異常。它是相同的異常還是不同的?

相關問題