android游标未关闭错误

时间:2011-10-26 18:03:10

标签: android cursor

我在数据库适配器中使用以下例程。每次调用它时,都会使用“应用程序未关闭光标”创建错误。

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

我打电话给:

int cnt = mDbHelper.dbio_rcount(“从mytable中选择count(*)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 个答案:

答案 0 :(得分:5)

我的猜测是你在使用mCursor.moveToFirst()调用时遇到异常,这意味着你的应用程序在mCursor.close()发生之前崩溃了。 通常我做的是检查mCursor.getCount()>在我调用moveToFirst()之前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 ;
    }