我有时会在logcat输出中看到此错误,
Cursor: invalid statement in fillWindow().
Run Code Online (Sandbox Code Playgroud)
当我按下后退键然后listview在转到我的自定义之前它进入默认的Android时,有时会发生这种情况listview.
这是什么意思?我该如何解决?因为它没有指向问题来自的任何代码行.
Bry*_*yan 32
处理ListActivities时,此问题与活动停止时未正确关闭的Cursor对象,CursorAdapter对象和Database对象有关,并且在Activity启动或恢复时未正确设置.
我必须确保在TabActivity恢复时调用的Activity的onStop方法中以相应的顺序关闭了我的SimpleListAdapter,我的游标,然后关闭了我的数据库对象.
我已经关闭了Cursor和Database对象,但还没有关闭我的SimpleListAdapter Cursor.
/**
* onStop method
*
* Perform actions when the Activity is hidden from view
*
* @return void
*
*/
@Override
protected void onStop() {
try {
super.onStop();
if (this.mySimpleListAdapterObj !=null){
this.mySimpleListAdapterObj.getCursor().close();
this.mySimpleListAdapterObj= null;
}
if (this.mActivityListCursorObj != null) {
this.mActivityListCursorObj.close();
}
if (this.myDatabaseClassObj != null) {
this.myDatabaseClassObj.close();
}
} catch (Exception error) {
/** Error Handler Code **/
}// end try/catch (Exception error)
}// end onStop
Run Code Online (Sandbox Code Playgroud)
Jay*_*epW 19
以正确的顺序关闭游标,数据库,DBHelper是至关重要的.
例如,对于下面的给定代码.
DBHelper dbhelper = new DBHelper();
SQLiteDataBase db = dbhelper.getWritableDatabase();
Cursor c = db.query(/*some parameters*/);
Run Code Online (Sandbox Code Playgroud)
关闭的顺序应该是:
c.close();
db.close();
dbhelper.close();
Run Code Online (Sandbox Code Playgroud)
否则不同的错误会继续产生,开发人员甚至不会知道它."Cursor:fillWindow()中的无效语句"是其中一个错误.
也许这可以帮到你:http://www.ragtag.info/2011/feb/1/database-pitfalls/
似乎对getReadableDatabase和getWritableDatabase的调用返回与数据库相同的连接(即使您对它们进行了多次调用).因此,对任何一个调用close()将关闭两个连接.
如果您稍后尝试使用游标,则会获得漂亮的"无效语句",因为游标所依赖的连接已经关闭.