2015-06-14 53 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

相關問題