Android-请求大小为0的CursorIndexOutOfBounds索引0

Android-请求大小为0的CursorIndexOutOfBounds索引0,android,sqlite,Android,Sqlite,我试图通过使用Cursor将SQLite数据库中的一些值返回到代码中,但是我得到了 06-14 22:31:30.586: E/AndroidRuntime(18859): android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 06-14 22:31:30.586: E/AndroidRuntime(18859): at android.database.AbstractC

我试图通过使用
Cursor
将SQLite数据库中的一些值返回到代码中,但是我得到了

06-14 22:31:30.586: E/AndroidRuntime(18859): android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
06-14 22:31:30.586: E/AndroidRuntime(18859):    at android.database.AbstractCursor.checkPosition(AbstractCursor.java:426)
06-14 22:31:30.586: E/AndroidRuntime(18859):    at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
06-14 22:31:30.586: E/AndroidRuntime(18859):    at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:68)
06-14 22:31:30.586: E/AndroidRuntime(18859):    at com.km.parkit.ChosenSlotDAO.cursorToSlot(ChosenSlotDAO.java:166)
06-14 22:31:30.586: E/AndroidRuntime(18859):    at com.km.parkit.ChosenSlotDAO.createSlot(ChosenSlotDAO.java:57)
06-14 22:31:30.586: E/AndroidRuntime(18859):    at com.km.parkit.MainMap$1.onClick(MainMap.java:80)
06-14 22:31:30.586: E/AndroidRuntime(18859):    at android.view.View.performClick(View.java:4756)
06-14 22:31:30.586: E/AndroidRuntime(18859):    at android.view.View$PerformClick.run(View.java:19761)
我必须像这样使用单独的
get
获取每个列

public String getSelectedSlot() {
            String slot = new String();

            Cursor cursor = database.query(ChosenSlotDatabaseHandler.TABLE_CHOSEN_PARKING_SLOT,
                chosenSlotColumn, null, null, null, null, null);

            if( cursor.moveToFirst() ) {
                slot = cursor.getString(0);
            }
            // make sure to close the cursor
            cursor.close();
            return slot;
          }

      public String getParked() {
            String parked = new String();

            Cursor cursor = database.query(ChosenSlotDatabaseHandler.TABLE_CHOSEN_PARKING_SLOT,
                    chosenParkedColumn, null, null, null, null, null);

            if( cursor.moveToFirst() ) {
                parked = cursor.getString(0);
            }
            // make sure to close the cursor
            cursor.close();
            return parked;
          }

      public String getIsParked() {
            String isParked = new String();

            Cursor cursor = database.query(ChosenSlotDatabaseHandler.TABLE_CHOSEN_PARKING_SLOT,
                    isParkedColumn, null, null, null, null, null);

            if( cursor.moveToFirst() ) {
                isParked = cursor.getString(0);
            }
            // make sure to close the cursor
            cursor.close();
            return isParked;
          }
这是我的
updateSlot

public ChosenParkingSlot updateSlot(String Id, String selectedSlot, String parkedRow, String isParked) {
            ContentValues values = new ContentValues();
            values.put(ChosenSlotDatabaseHandler.CHOSEN_ID, Id);
            values.put(ChosenSlotDatabaseHandler.CHOSEN_SLOT_NAME, selectedSlot);
            values.put(ChosenSlotDatabaseHandler.CHOSEN_PARKED_ROW, parkedRow);
            values.put(ChosenSlotDatabaseHandler.IS_PARKED, isParked);
            long insertId = database.update(ChosenSlotDatabaseHandler.TABLE_CHOSEN_PARKING_SLOT, values, "_id= " + Id,
                null);
            Cursor cursor = database.query(ChosenSlotDatabaseHandler.TABLE_CHOSEN_PARKING_SLOT,
                allColumns, ChosenSlotDatabaseHandler.CHOSEN_ID + " = " + insertId, null,
                null, null, null);
            cursor.moveToFirst();
            ChosenParkingSlot newSlot = cursorToSlot(cursor);
            cursor.close();
            return newSlot;
          }
这是我的
光标

private ChosenParkingSlot cursorToSlot(Cursor cursor) {
          ChosenParkingSlot parkingSlot = new ChosenParkingSlot();
          parkingSlot.setId(cursor.getInt(0));
          parkingSlot.setSlotName(cursor.getString(1));
          parkingSlot.setParkedRow(cursor.getString(2));
          parkingSlot.setIsParked(cursor.getInt(3));
          return parkingSlot;
      }
出了什么问题??索引0表示第一列。。对


我确实创建了值为
id=1
slot\u name=selectedSlot
的数据库,其余为空。

在获取数据之前,首先检查此条件

if(cursor!=null && cursor.getCount()>0){
  cursor.moveToFirst();
  num = cursor.getString(cursor.getColumnIndex("<column index>")); 
}
if(cursor!=null&&cursor.getCount()>0){
cursor.moveToFirst();
num=cursor.getString(cursor.getColumnIndex(“”);
}
可能您的游标对象没有从数据库中获取任何内容


遵循这个stackoverflow链接实际上是因为我的光标指向空值,4k3R回答是

我使用了
public ChosenParkingSlot createSlot(字符串id、字符串slot、字符串parkedRow、字符串isParked)

要创建停车位索引0,但是,我忘记了我不应该将
NULL
值放入这四个字符串中的任何一个,因为
Cursor
NULL
不友好


我使用了
String
的值“0”
作为
的替代品,在需要的四个
字符串中的任何一个。感谢所有帮助我认识到错误的人D

我目前有
if(cursor!=null&&cursor.moveToFirst()){isParked=cursor.getString(0);}
所以现在我必须在我的
cursor.getString()中添加
getColumnIndex
?你没有显示
createSlot()
。是的,正是因为如此,我意识到了我的错误,现在我正在编辑我的代码,我会回答我自己的问题。谢谢D