Android游标中"fillWindow()中的无效语句"是什么意思?

iro*_*xxx 31 android cursor

我有时会在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)

  • 我只是想感谢你,我只是花了太长时间对这个同样的问题感到沮丧而你的是我读过的唯一的建议,就是按照一定的顺序关闭事情,这是有效的.谢谢! (2认同)
  • 嗨,您好.作为Android的新手,我刚刚在研讨会上了解到"onStop"无法保证被调用.他们说,最好在"onPause"中做那些事情.只是说 - 如果我错了,请纠正我.我总是愿意向有经验的人学习. (2认同)

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()中的无效语句"是其中一个错误.

  • 如果我从我的列表活动的自定义游标适配器(扩展cursoradapter)的方法返回游标,如何处理 (2认同)

Jes*_*ido 7

也许这可以帮到你:http://www.ragtag.info/2011/feb/1/database-pitfalls/

似乎对getReadableDatabase和getWritableDatabase的调用返回与数据库相同的连接(即使您对它们进行了多次调用).因此,对任何一个调用close()将关闭两个连接.

如果您稍后尝试使用游标,则会获得漂亮的"无效语句",因为游标所依赖的连接已经关闭.