我试图通过使用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;
}
这是我的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
其余为空。
答案 0 :(得分:0)
首先在获取数据之前检查此条件
if(cursor!=null && cursor.getCount()>0){
cursor.moveToFirst();
num = cursor.getString(cursor.getColumnIndex("<column index>"));
}
也许你的光标对象没有从数据库中获取任何内容。
请遵循此stackoverflow链接android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
答案 1 :(得分:0)
实际上是因为我的光标指向空值,是的,由4k3R回答。
我使用了public ChosenParkingSlot createSlot(String id, String slot, String parkedRow, String isParked)
要创建停车位索引0,但是我忘了我不应该将NULL
值放入这四个字符串中的任何一个,因为Cursor
与NULL
不友好。< / p>
我已使用String
的值"0"
代替empty
代替Strings
中的任何一个#ifndef DateToolsLocalizedStrings
#define DateToolsLocalizedStrings(key) \
NSLocalizedStringFromTableInBundle(key, @"DateTools", [NSBundle bundleWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"DateTools.bundle"]], nil)
#endif
。感谢所有帮助我实现错误的人! :d