【问题标题】:Sqlite - getting Index 0 requested, with a size of 0Sqlite - 请求索引 0,大小为 0
【发布时间】:2016-02-09 12:23:59
【问题描述】:

我正在尝试从我的数据库中获取一个联系人,我不断收到请求的索引 0,错误大小为 0。

这是我的代码:

// Getting single contact
Contact getContact(int id) {
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.query(TABLE_NAME, new String[]
                    { COLUMN_ID, COLUMN_FULLNAME, COLUMN_PHONE, COLUMN_EMAIL, COLUMN_ADDRESS, COLUMN_SITE, COLUMN_BIRTHDAY },
                    COLUMN_ID + "=?",
                    new String[] { String.valueOf(id) }, null, null, null, null);


    if (cursor != null)
        cursor.moveToFirst();

        Contact contact = new Contact(
            Integer.parseInt(cursor.getString(0)),
            cursor.getString(1),
            cursor.getString(2),
            cursor.getString(3),
            cursor.getString(4),
            cursor.getString(5),
            cursor.getString(6));
    db.close();
    cursor.close();
    return contact;
}

这是我得到的错误:

android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0

请帮助我了解该怎么做...

【问题讨论】:

    标签: android sqlite cursor indexoutofboundsexception


    【解决方案1】:

    编辑:试试这个方法,应该可以的。

    Contact getContact(int id) {
        Contact contact = null;
        String query = "SELECT * FROM " + TABLE_NAME + " WHERE " + COLUMN_ID + " = " + id;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(query, null);
        if(cursor.moveToFirst()) {
            cursor.moveToFirst();
            contact = new Contact(
                    Integer.parseInt(cursor.getString(0)),
                    cursor.getString(1),
                    cursor.getString(2),
                    cursor.getString(3),
                    cursor.getString(4),
                    cursor.getString(5),
                    cursor.getString(6));
        }
        cursor.close();
        return contact;
    }
    

    也许会改变:

    if (cursor != null) 
        cursor.moveToFirst();
    

    与:

    if(cursor.moveToFirst()) 
    

    对于这个Android Reference on Cursor,如果光标是空的,moveToFirst()返回false。

    【讨论】:

      【解决方案2】:

      可能你的桌子是空的。

      尝试将条件更改为

      if (cursor.moveToFirst())
      {
      
          Contact contact = new Contact(
              Integer.parseInt(cursor.getString(0)),
              cursor.getString(1),
              cursor.getString(2),
              cursor.getString(3),
              cursor.getString(4),
              cursor.getString(5),
              cursor.getString(6)); 
      }
      

      【讨论】:

      • @LirazShakaAmir 你能检查游标的大小并告诉我它返回的内容吗,使用 cursor.getCount() ,你可以使用日志 Log.d("Cursor Count: ",cursor.getCount().toString); (删除或评论首先解决错误的代码)。跨度>
      【解决方案3】:

      您的查询没有匹配任何数据。

      检查moveTo...() 的结果以了解游标是否指向有效行:如果移动不成功,则方法调用返回false。要使查询匹配数据并返回行,请检查您的查询选择条件。

      此外,SQLiteDatabase 查询方法永远不会为 Cursor 返回 null,因此 != null 检查是多余的。

      【讨论】:

      • 如何检查它是否指向有效行?我如何让它指向一个?
      猜你喜欢
      • 2013-08-02
      • 1970-01-01
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多