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
,而不是 moveToFirst
。 rawQuery
周围有一个 try/catch,它抛出了抛出的异常。无论哪种方式,您的修复都应该有效。但是,我会在mCursor.close()
之前添加一个空检查。如果 rawQuery
正在抛出 mCursor
将在您的 finally
块中为空。以上是关于android光标未关闭错误的主要内容,如果未能解决你的问题,请参考以下文章
android.database.CursorWindowAllocationException:即使在关闭光标后,2048 kb 的光标窗口分配也失败
Android - 关闭数据库后可以使用 SQLite 光标吗?
尝试使用“new View.OnClickListener”时,Android Studio 中出现错误(未解决的参考)[关闭]
AppcompatEditText 未显示 android:textCursorDrawable="@null" 和自定义背景集的光标