android光标未关闭错误

Posted

技术标签:

【中文标题】android光标未关闭错误【英文标题】:android cursor not closed error 【发布时间】:2011-10-26 18:03:10 【问题描述】:

我在我的数据库适配器中使用以下例程。每次调用时,都会创建一个错误,并显示“应用程序没有关闭光标”。

我不知道如何关闭光标,因为我没有在调用例程中打开它。这在列表中的显示适配器中使用。

我是这样称呼它的:

int cnt = mDbHelper.dbio_rcount("select count(*) from mytable where field1 = 'V'));

public int dbio_rcount( String p_query )

    int v_ret = 0 ;
    Cursor mCursor = null ;

    try
    
        mCursor  = mDb.rawQuery( p_query, null );
    catch (SQLException e) 

    if  (  ( mCursor != null )
        && ( mCursor.moveToFirst()) )
    
        v_ret  = mCursor.getInt( 0 );
    
    mCursor.close();

    return v_ret ;

【问题讨论】:

【参考方案1】:

我的猜测是您在调用 mCursor.moveToFirst() 时遇到了异常,这意味着您的应用程序在 mCursor.close() 发生之前崩溃了。 通常我所做的是在调用 moveToFirst() 之前检查 mCursor.getCount() > 0.. 但这只是我.. 我建议这样做:

 public int dbio_rcount(String p_query)
 
       int v_ret = 0 ;
       Cursor mCursor = null ;

       try
       
           mCursor  = mDb.rawQuery(p_query, null);
           if (mCursor != null && mCursor.getCount() > 0)
           
              mCursor.moveToFirst();
              v_ret  = mCursor.getInt( 0 );
           
        catch (SQLException e) 
         Log.e(TAG, "sql exception in dbio_count", e);            
        catch(Exception ex) 
         Log.e(TAG, "other exception in dbio_count", ex);
        finally 
         if (mCursor != null) 
           mCursor.close();
         
       

       return v_ret ;
    

【讨论】:

看起来 moveToFirst() 不应该抛出异常。我也没有使用 rawQuery 。你可以试试看它是否有帮助。你确定这是没有关闭的光标吗? 我认为您对异常的看法是正确的,但它发生在 rawQuery,而不是 moveToFirstrawQuery 周围有一个 try/catch,它抛出了抛出的异常。无论哪种方式,您的修复都应该有效。但是,我会在mCursor.close() 之前添加一个空检查。如果 rawQuery 正在抛出 mCursor 将在您的 finally 块中为空。

以上是关于android光标未关闭错误的主要内容,如果未能解决你的问题,请参考以下文章

android.database.CursorWindowAllocationException:即使在关闭光标后,2048 kb 的光标窗口分配也失败

Android - 关闭数据库后可以使用 SQLite 光标吗?

尝试使用“new View.OnClickListener”时,Android Studio 中出现错误(未解决的参考)[关闭]

AppcompatEditText 未显示 android:textCursorDrawable="@null" 和自定义背景集的光标

完成未停用或关闭的游标非致命错误

Android 光标错误 - 确保光标已正确初始化