我正在获得这段代码的"完成一个尚未停用或关闭的光标"错误.该代码用于填充列表视图.
因为它是一个非致命的错误,没有崩溃,所有似乎都工作正常..但我不喜欢错误.
如果我关闭此代码末尾的光标......列表视图保持空白.如果我在onStop上关闭光标,我会得到同样的错误.
我该如何解决??
private void updateList() {
DBAdapter db = new DBAdapter(this);
db.open();
//load all waiting alarm
mCursor=db.getTitles("state<2");
setListAdapter(new MyCursorAdapter(this, mCursor));
registerForContextMenu(getListView());
db.close();
}
error :
E/Cursor ( 2318): Finalizing a Cursor that has not been deactivated
or closed. database = /data/data/xxxxxxxxxxxxxxx.db, table = alerts,
query = SELECT _id, alert_id,
E/Cursor ( 2318):
android.database.sqlite.DatabaseObjectNotClosedException: Application
did not close the cursor or database
object that was opened here
E/Cursor ( 2318): at
android.database.sqlite.SQLiteCursor.<init>(SQLiteCursor.java:210)
E/Cursor ( 2318): at
android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:
53)
E/Cursor ( 2318): at
android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:
1345)
E/Cursor ( 2318): at
android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:
1229)
....
....
Run Code Online (Sandbox Code Playgroud)
Com*_*are 27
如果你关闭Cursorin onStop()或者,你不应该收到该消息onDestroy().请再试一次.或者,从您的查询中startManagingCursor()获取后调用Cursor,Android将Cursor自行关闭.
小智 13
斯科特,
我遇到了和你一样的问题.在关闭数据库之前,即"db.close()",确保首先关闭游标,即"mCursor.close()"
像这样:
private void updateList()
{
DBAdapter db = new DBAdapter(this);
db.open();
//load all waiting alarm
mCursor=db.getTitles("state<2");
setListAdapter(new MyCursorAdapter(this, mCursor));
registerForContextMenu(getListView());
// Let's close the cursor.
mCursor.close();
db.close();
}
Run Code Online (Sandbox Code Playgroud)
您提到如果关闭光标,列表视图将保持为空.我建议你将信息传递给一个类并复制它(分配内存)然后关闭光标.
| 归档时间: |
|
| 查看次数: |
48400 次 |
| 最近记录: |