尚未停用或关闭的游标

时间:2011-07-04 13:45:52

标签: android database sqlite cursor

我几乎没有使用sqlite数据库的活动,当然使用游标但是在我使用游标的每个方法中我都会一直关闭它们。 。 。 即使我关闭游标仍然得到这个消息

I/dalvikvm( 5232):  at android.database.sqlite.SQLiteCursor.finalize(SQLiteCursor.java:631)

I/dalvikvm( 5232):  at dalvik.system.NativeStart.run(Native Method)

I/dalvikvm( 5232): Uncaught exception thrown by finalizer (will be discarded):

I/dalvikvm( 5232): Ljava/lang/IllegalStateException;: Finalizing cursor android.database.sqlite.SQLiteCursor@467ed108 on my_table_name that has not been deactivated or closed

究竟是什么问题?我怎样才能找到代码中的错误?应该“(SQLiteCursor.java:631)”对我有意义吗?

由于

4 个答案:

答案 0 :(得分:1)

不,但是这个

      android.database.sqlite.SQLiteCursor@467ed108

可以帮助您确定哪一个是未正确关闭的那个。您可以记录光标的引用,您将获得与上面类似的字符串,例如:

      Log.d("ActivityX", cursor1);

答案 1 :(得分:0)

您已关闭数据库连接但未关闭游标

当关闭DB连接时,首先检查Cursor,就像那样..

Cursor c;

if (c != null) {
    c.deactivate();
    c.close();
}

答案 2 :(得分:0)

当一个线程由于错误而终止并且随之关闭活动时,我遇到了这个错误。可能就是这就是发生的事情。您可能希望检查错误上方的logcat输出,以查看是否有另一个错误导致线程结束活动,从而产生额外错误。

答案 3 :(得分:0)

我还在我的应用中修复了此错误。当我用游标进行fetch调用时,我正在执行以下检查:

if (mCursor != null && Cursor.getCount() > 0) {
    //Iterate through cursor list
    mCursor.close();
}

导致此错误的原因是,即使getCount()== 0,您仍需要关闭游标。逻辑应为:

if (mCursor != null) {
    if(mCursor.getCount() > 0) {
         //Iterate through cursor list
    }
    mCursor.close();
}

希望能有所帮助。