【问题标题】:CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0?CursorIndexOutOfBoundsException: 请求索引 0,大小为 0?
【发布时间】:2016-08-25 07:30:22
【问题描述】:

我正在尝试从我的 sqlite 数据库中获取一行。当我运行这行代码时:-

  RReckoner_info rReckoner_info = dbHandler.get_subcategory(1);
        Log.d("INFO : ", rReckoner_info.getCategory_name());

我收到以下错误:-

android.database.CursorIndexOutOfBoundsException:请求索引 0, 大小为 0

  public RReckoner_info get_subcategory(int id)
    {
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(TABLE_SUBCATEGORY_LIST, new String[]{KEY_NAME,KEY_DESC, KEY_CATEGORY_ID, KEY_CONTENT1,KEY_CONTENTTYPE1,KEY_CONTENT2,KEY_CONTENTTYPE2,KEY_CONTENT3,KEY_CONTENTTYPE3,
                KEY_CONTENT4,KEY_CONTENTTYPE4,KEY_CONTENT5,KEY_CONTENTTYPE5,KEY_CONTENT6,KEY_CONTENTTYPE6,KEY_ORDERID,KEY_STATUS ,KEY_UPDATED},KEY_NAME +"=?",
                new String[]{String.valueOf(id)},null,null, null,null);
        if (cursor !=null)
        {
            cursor.moveToFirst();
        }

        RReckoner_info rReckoner_info = new RReckoner_info(cursor.getString(0),cursor.getString(1),Integer.parseInt(cursor.getString(2)),
                cursor.getString(3),cursor.getString(4),cursor.getString(5),cursor.getString(6)
                ,cursor.getString(7),cursor.getString(8),cursor.getString(9),cursor.getString(10),
                cursor.getString(11),cursor.getString(12),cursor.getString(13),cursor.getString(14),
                Integer.parseInt(cursor.getString(15)),cursor.getString(16),cursor.getString(17));

        return rReckoner_info;

    }

谁能帮我解决这个问题。任何帮助或建议表示赞赏。谢谢。

【问题讨论】:

标签: java android sqlite


【解决方案1】:

更改以下代码

发件人:

if (cursor !=null)
    {
        cursor.moveToFirst();
    }
RReckoner_info rReckoner_info = new RReckoner_info(cursor.getString(0),cursor.getString(1),Integer.parseInt(cursor.getString(2)),
            cursor.getString(3),cursor.getString(4),cursor.getString(5),cursor.getString(6)
            ,cursor.getString(7),cursor.getString(8),cursor.getString(9),cursor.getString(10),
            cursor.getString(11),cursor.getString(12),cursor.getString(13),cursor.getString(14),
            Integer.parseInt(cursor.getString(15)),cursor.getString(16),cursor.getString(17));

return rReckoner_info;

收件人:

if (cursor !=null && cursor.getCount() > 0)
    {
        cursor.moveToFirst();
        RReckoner_info rReckoner_info = new RReckoner_info(cursor.getString(0),cursor.getString(1),Integer.parseInt(cursor.getString(2)),
            cursor.getString(3),cursor.getString(4),cursor.getString(5),cursor.getString(6)
            ,cursor.getString(7),cursor.getString(8),cursor.getString(9),cursor.getString(10),
            cursor.getString(11),cursor.getString(12),cursor.getString(13),cursor.getString(14),
            Integer.parseInt(cursor.getString(15)),cursor.getString(16),cursor.getString(17));

    return rReckoner_info;
    }
return null;

如果没有找到我返回null的行,您可以根据您的要求更改最后一部分,但您必须检查光标的count以避免CursorIndexOutOfBoundsException

【讨论】:

    【解决方案2】:

    改成

        if (cursor !=null)
        {
            cursor.moveToFirst();
    
           RReckoner_info rReckoner_info = new RReckoner_info(cursor.getString(0),cursor.getString(1),Integer.parseInt(cursor.getString(2)),
                cursor.getString(3),cursor.getString(4),cursor.getString(5),cursor.getString(6)
                ,cursor.getString(7),cursor.getString(8),cursor.getString(9),cursor.getString(10),
                cursor.getString(11),cursor.getString(12),cursor.getString(13),cursor.getString(14),
                Integer.parseInt(cursor.getString(15)),cursor.getString(16),cursor.getString(17));
    
            return rReckoner_info;
       }
       return null;
    

    【讨论】:

      【解决方案3】:

      您的查询没有提取任何记录,如CursorIndexOutOfBoundsException 所示:

      指示游标超出范围的异常。

      检查是否至少有一条记录:

       if (cursor !=null && cursor.getCount() > 0) {
           cursor.moveToFirst();
      
      
         // Code to extract data
      }
      

      或者您可以执行以下操作,因为如果没有记录,moveToFirst 将返回 false

      如果光标为空,此方法将返回 false。

      if (cursor != null && cursor.moveToFirst()) {
          // Code to extract data
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-30
        • 2013-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-02
        相关资源
        最近更新 更多