【问题标题】:index out of bound exception with sqlite databasesqlite数据库的索引越界异常
【发布时间】:2012-06-19 20:21:34
【问题描述】:

我尝试实现以下代码

在activity.java文件中

      DatabaseEvent mDbHelper = new DatabaseEvent(getApplicationContext());
      mDbHelper.open();
      Cursor notesCursor = mDbHelper.fetchEvent();
             startManagingCursor(notesCursor);
        String[] from = new String[]{DatabaseEvent.KEY_ETITLE, DatabaseEvent.KEY_DISTANCE, DatabaseEvent.KEY_IMGNAME, DatabaseEvent.KEY_DESCRIPTION, DatabaseEvent.KEY_EID};
            int[] to = new int[]{R.id.title, R.id.duration, R.id.list_image, R.id.artist, R.id.id};
            SimpleCursorAdapter event = 
                    new SimpleCursorAdapter(getApplicationContext(), R.layout.list_row, notesCursor, from, to);

在DatabaseEvent.java中

               public long createEvent(String title, String distance, String imgname, String description, String eid) {
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_ETITLE, title);
        initialValues.put(KEY_DISTANCE, distance);
        initialValues.put(KEY_IMGNAME, imgname);
        initialValues.put(KEY_DESCRIPTION, description);
        initialValues.put(KEY_EID, eid);

          Log.v("INFO1","inserting db");
        return mDb.insert(EVENT_TABLE, null, initialValues);

    }


         public Cursor fetchEvent() {
         Log.v("INFO1","fetching db");
         Cursor mCursor = mDb.query(EVENT_TABLE, new String[] {KEY_ROWID, KEY_ETITLE, KEY_DISTANCE,
                KEY_IMGNAME, KEY_DESCRIPTION, KEY_EID}, null, null,null,null, KEY_DISTANCE+" ASC");

        return mCursor;


    }

在 logcat 上,我可以清楚地看到日志消息“inserting db”被打印了 3 次意味着数据日期真正添加到数据库中,但是日志消息“fetching db”打印了一次并给了我流动的错误说:

             CursorIndexOutOfBoundException index -1, requsted, with a size of 60,

我尝试了 moveToFirst() 和 moveToNext() 等不同的功能,但仍然无法解决问题,任何人都可以帮我,任何帮助将不胜感激!

【问题讨论】:

  • 请发布您所有的 logcat 错误。我不认为错误是你认为的......
  • 当然获取部分只显示一次,你只查询数据库一次。

标签: android sqlite


【解决方案1】:

你忘了包含mCursor.moveToFirst();

将代码更改为

   public Cursor fetchEvent() {
         Log.v("INFO1","fetching db");
         Cursor mCursor = mDb.query(EVENT_TABLE, new String[] {KEY_ROWID, KEY_ETITLE, KEY_DISTANCE,
                KEY_IMGNAME, KEY_DESCRIPTION, KEY_EID}, null, null,null,null, KEY_DISTANCE+" ASC");
        mCursor.moveToFirst();
        return mCursor;


    }

【讨论】:

  • 虽然这是一个 智能 移动,但如果您只是将光标绑定到 ListView,则不会将光标从索引 -1 移动。
  • 是的,你完全正确!但是 CursorIndexOutOfBoundException 索引 -1 表明他的光标没有指向第一个数据。这里是同一帖子 stackoverflow.com/questions/6710565/…
  • 感谢您的回答,山姆,但是当我再次尝试时,它给了我一个错误提示“请求失败,java lang 空指针异常”
猜你喜欢
  • 2017-09-08
  • 2019-03-08
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多