0

我目前正在处理片段中的 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 中没有任何信息。那我的失败是什么???

4

1 回答 1

1

最后,我在这里找到了来自 android 框架开发的 Dianne Hackborn 的正确声明:“内容提供者是在创建托管进程时创建的,并且只要进程存在就一直存在,因此无需关闭数据库 - - 当进程被杀死时,它将作为内核清理进程资源的一部分而关闭。Dianne Hackborn Android 框架工程师 hack...@android.com “ - 所以让我们使用 Content Provider。

于 2011-10-28T19:44:26.670 回答