2011-10-26 35 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。