android光标未关闭错误
我正在数据库适配器中使用以下例程。每次调用它时,都会创建一个错误,“应用程序未关闭光标” 我不知道如何关闭光标,因为我没有在调用例程中打开它。这在列表中的显示适配器中使用 我称之为: int cnt=mDbHelper.dbio_rcount(“从mytable中选择count(*),其中field1='V')android光标未关闭错误,android,cursor,Android,Cursor,我正在数据库适配器中使用以下例程。每次调用它时,都会创建一个错误,“应用程序未关闭光标” 我不知道如何关闭光标,因为我没有在调用例程中打开它。这在列表中的显示适配器中使用 我称之为: int cnt=mDbHelper.dbio_rcount(“从mytable中选择count(*),其中field1='V') 我猜您在调用mCursor.moveToFirst()时遇到异常,这意味着您的应用程序在mCursor.close()发生之前崩溃。。 通常我要做的是在调用moveToFirst()之前
我猜您在调用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 ;
}
我猜您在调用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
,而不是moveToFirst
。有一个try/catch围绕rawQuery
的问题at抛出抛出的异常。您的修复程序应该可以以任何方式运行。但是,我会在mCursor.close()
之前添加一个空检查。如果rawQuery
抛出mCursor
将在finally
块中为空。看起来像moveToFirst()不应该抛出异常..而且我没有使用rawQuery..您可以尝试一下,看看它是否有帮助。您确定这是未关闭的光标吗?我认为您对异常的看法是正确的,但它发生在rawQuery
,而不是moveToFirst
。有一个try/catch围绕rawQuery
的问题at抛出抛出的异常。您的修复程序应该可以以任何方式运行。但是,我会在mCursor.close()
之前添加一个空检查。如果rawQuery
抛出mCursor
将在finally
块中为空。