dimanche 14 juin 2015

Android - CursorIndexOutOfBounds Index 0 requested with size of 0

I'm trying to return some values from my SQLite Database into my code through the use of Cursor but I get

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)

I have to get each and every one of the column using separate get like this

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

And here's my 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;
          }

Here's my 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;
      }

What went wrong?? Index 0 means the first column.. Right....?

I did create the database with values of id = 1, slot_name = selectedSlot The rest are null.

Aucun commentaire:

Enregistrer un commentaire