如何解决这个异常?

时间:2011-09-01 18:28:07

标签: java android database sqlite exception

我收到了这个异常,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以及databasehelper,但两者都不起作用。

有人可以帮我这个吗?

编辑:

@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()函数中打开了一个数据库帮助器。 填充列表视图时使用的游标, 用于查找现有记录的游标, 游标获取信息。


更新:

我尝试关闭onPause和onDestroy,它仍然会因runtimeexception而崩溃。

2 个答案:

答案 0 :(得分:0)

您是否正在关闭SQLiteDatabase对象。如果没有尝试像这样关闭SQLiteDatabase对象

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

  2. //代码块

  3. db.close();

  4. 并运行您的应用程序。

    请您发布您的代码,以便了解您的问题会更有帮助。

答案 1 :(得分:0)

很抱歉迟到的回复。 从我看到的,你已经打开了数据库使用     mDbHelpher.open() 之后你做了populatelist() 你之后尝试过做mDbHelpher.close()吗?

游标也一样。因为您的错误清楚地表明数据库或光标已打开。 一旦使用完db,就应该关闭。即使您访问其他活动后再按下后退按钮,也不会出现问题。

另外,您说关闭数据库或游标时会遇到运行时异常。它是同一个例外还是不同?