如何在Cursorloader中关闭数据库

时间:2011-10-26 18:41:49

标签: android-cursorloader

我目前正在处理片段中的ListViews。 Listviews由Cursorloader加载,但没有ContentManager。所以代码看起来像这样,它可以工作:

@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-Error-Message。但是如果我使用dbhelper.close();我得到错误“数据库已经关闭”这也是可以理解的,因为它就在return语句之前。在返回语句代码无法访问之后,如果我声明DBHelper dbhelper1 final,程序崩溃而没有logcat中的任何信息。那么我的失败是什么?

1 个答案:

答案 0 :(得分:1)

最后,我从Android框架开发中发现了here Dianne Hackborn的正确陈述:“内容提供程序是在创建托管进程时创建的,并且只要进程一直存在,所以有无需关闭数据库 - 当进程被杀死时,它将作为内核清理进程资源的一部分关闭.Dianne Hackborn Android框架工程师黑客... @ android.com“ - 所以让我们使用Content Provider。