“fillWindow() 中的无效语句”是什么意思? Android中的光标是什么意思?
我有时会在 logcat
输出中看到此错误,
Cursor: invalid statement in fillWindow().
有时当我按下后退键,然后它会在转到我的自定义 之前转到默认的 Android
listview
时,会发生此错误列表视图。
这是什么意思?我该如何解决?因为它没有指向问题所在的任何代码行。
I sometimes see this error in my logcat
output,
Cursor: invalid statement in fillWindow().
It sometimes happens when I press the back key and then it goes to the default Android listview
before going to my custom listview
.
What does it mean? How do I solve it? Because it does not point to any line of code where the problem is coming from.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
发布评论
评论(5)
以正确的顺序关闭游标、数据库、DBHelpers 是至关重要的。
例如
对于下面给定的代码。
DBHelper dbhelper = new DBHelper();
SQLiteDataBase db = dbhelper.getWritableDatabase();
Cursor c = db.query(/*some parameters*/);
关闭的顺序应该是这样的:
c.close();
db.close();
dbhelper.close();
否则,不同的错误会不断产生,而开发人员甚至不会知道它。 “光标:fillWindow() 中的语句无效”就是此类错误之一。
也许这可以帮助您: http://www.ragtag.info/2011/feb/1/database -pitfalls/
似乎对 getReadableDatabase 和 getWritableDatabase 的调用返回与数据库的相同连接(即使您进行了多次调用给他们)。
因此,对其中任何一个的 close() 的任何调用都会关闭这两个连接。
如果稍后尝试使用游标,您将得到漂亮的“无效语句”,因为游标所依赖的连接已经关闭。
我仍然遇到“fillWindow() 中的无效语句”错误的问题。
我已将问题范围缩小到 ListView 的 SimpleCursorAdapter 光标。
例如,如果我位于活动 A 的列表视图中,并且在启动新的活动 B 之前关闭游标,则当我返回活动 A 时,我不会收到“FillWindow() 中的无效语句”。
但是,在之前活动 B 加载,我看到活动 A 的列表视图中的列表在屏幕上消失,并且在屏幕隐藏之前、活动 B 的屏幕显示之前短暂显示“未找到记录”消息。
我怎样才能优雅地解决这个问题?
编辑:
我今天早上实际上就明白了这一点。我将
this.stopManagingCursor(this.myListCursor);
添加到 ListActivity 类中的 onPause 方法,并解决了“fillWindow() 中的无效语句”错误。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
处理 ListActivities 时,此问题与活动停止时未正确关闭 Cursor 对象、CursorAdapter 对象和数据库对象以及活动启动或恢复时未正确设置有关。
我必须确保在 TabActivity 恢复时调用的 Activity 的 onStop 方法中按各自的顺序关闭 SimpleListAdapter、Cursors 和 Database 对象。
我已经关闭了 Cursor 和 Database 对象,但还没有关闭我的 SimpleListAdapter Cursor。
When dealing with ListActivities, this issue has to do with the Cursor objects, CursorAdapter objects, and Database objects not being closed properly when the Activity stops, and not being set properly when the Activity starts or resumes.
I had to make sure that I closed my SimpleListAdapter, my Cursors, and then my Database objects in that respective order, in the onStop method of the Activity that is called when the TabActivity resumes.
I had already been closing the Cursor and Database objects, but had not been closing my SimpleListAdapter Cursor.