我试图通过使用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 = 1
,slot_name = selectedSlot
其余值的数据库是空的。读取数据
if(cursor!=null && cursor.getCount()>0){
cursor.moveToFirst();
num = cursor.getString(cursor.getColumnIndex("<column index>"));
}
也许你的光标对象不获取从数据库中任何事情之前
您没有显示'createSlot()'。 –
是的,正是因为如此,我意识到自己的错误,现在我正在编辑我的代码,将回答我自己的问题。谢谢! :D –