2016-08-25 102 views
1

我想从我的SQLite得到单列database.When我跑这行代码: -CursorIndexOutOfBoundsException:请求索引0,大小为0?

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

我得到以下错误: -

android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 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; 

    } 

任何人都可以帮助我解决这个问题。任何帮助或建议表示赞赏。谢谢。

+1

它说,没有任何项目返回,并且您正在尝试访问您的光标的第一项。 – SripadRaj

+0

http://stackoverflow.com/a/11257527/2435238可能的重复 – sJy

回答

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

0

变化

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; 
0

有没有您的查询提取的记录,为CursorIndexOutOfBoundsException表示:

An exception indicating that a cursor is out of bounds.

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

if (cursor !=null && cursor.getCount() > 0) { 
    cursor.moveToFirst(); 


    // Code to extract data 
} 

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

This method will return false if the cursor is empty.

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