2015-06-14 51 views
0

我试图通过使用Cursor从我SQLite数据库的一些值回到我的代码大小,但我得到的Android - CursorIndexOutOfBounds指数0要求与0

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

这里是我的Cursor

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 = 1slot_name = selectedSlot其余值的数据库是空的。读取数据

if(cursor!=null && cursor.getCount()>0){ 
    cursor.moveToFirst(); 
    num = cursor.getString(cursor.getColumnIndex("<column index>")); 
} 

也许你的光标对象不获取从数据库中任何事情之前

+0

您没有显示'createSlot()'。 –

+0

是的,正是因为如此,我意识到自己的错误,现在我正在编辑我的代码,将回答我自己的问题。谢谢! :D –

回答

0

它实际上是,是由4k3R回答。

我用public ChosenParkingSlot createSlot(String id, String slot, String parkedRow, String isParked)

要创建的停车位指标0,但是,我忘了,我不应该把NULL值放入其中任何四根弦,因为Cursor是不是NULL友好。

我在任何这四个Strings在必要的使用String"0"价值为empty的替代品。感谢所有帮助我实现我的错误的人! :D

相关问题