2011-10-26 38 views
0

我目前正在使用Fragments中的ListViews。 Listviews由Cursorloader加載,但沒有ContentManager。所以代碼看起來像這樣,它的工作原理:如何在Cursorloader中關閉數據庫

@Override 
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) { 

    Log.d("SoapERP", "onCreateLoader"); 
    CursorLoader loader = new CursorLoader(getActivity()) { 
    final DBHelper dbhelper1= new DBHelper(getActivity());  
     @Override 
     public Cursor loadInBackground() { 
      Cursor c = null; 
      dbhelper1.open(); 
      c = dbhelper1.fetchAllMatnameswithID(); 
//    dbhelper1.close(); 
      return c; 

     } 

    }; 
    return loader; 

我的問題是,我得到一個LogCat錯誤消息,數據庫未關閉。但是,如果我使用dbhelper.close();我得到錯誤「數據庫已經關閉」,這也是可以理解的,因爲它就在返回語句之前。在返回語句代碼無法訪問之後,如果我聲明DBHelper dbhelper1最終該程序崩潰,而logcat中沒有任何信息。那麼我的失敗是什麼?

+0

爲了防止錯誤,我試圖用Content Provider來做,但問題仍然是一樣的。但我認爲現在我更接近這個問題 - 線程。我正在關閉數據庫,而另一個線程仍在收集數據。現在我完全不清楚如何得到適當的解決方案。 –

回答

1

最後,我發現here作爲Dianne Hackborn在android框架開發中的正確聲明:「內容提供者在其主機進程創建時創建,並且只要進程存在就保留,因此不需要關閉數據庫 - 當進程被終止時,它將作爲內核的一部分關閉進程的資源。Dianne Hackborn Android框架工程師hack ... @ android.com「 - 讓我們使用Content Provider。