Android-请求大小为0的CursorIndexOutOfBounds索引0
我试图通过使用Android-请求大小为0的CursorIndexOutOfBounds索引0,android,sqlite,Android,Sqlite,我试图通过使用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.AbstractC
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;
}
这是我的光标
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\u name=selectedSlot
的数据库,其余为空。在获取数据之前,首先检查此条件
if(cursor!=null && cursor.getCount()>0){
cursor.moveToFirst();
num = cursor.getString(cursor.getColumnIndex("<column index>"));
}
if(cursor!=null&&cursor.getCount()>0){
cursor.moveToFirst();
num=cursor.getString(cursor.getColumnIndex(“”);
}
可能您的游标对象没有从数据库中获取任何内容
遵循这个stackoverflow链接实际上是因为我的光标指向空值,4k3R回答是 我使用了
public ChosenParkingSlot createSlot(字符串id、字符串slot、字符串parkedRow、字符串isParked)
要创建停车位索引0,但是,我忘记了我不应该将NULL
值放入这四个字符串中的任何一个,因为Cursor
与NULL
不友好
我使用了
String
和的值“0”
作为空
的替代品,在需要的四个字符串中的任何一个。感谢所有帮助我认识到错误的人D我目前有if(cursor!=null&&cursor.moveToFirst()){isParked=cursor.getString(0);}
所以现在我必须在我的cursor.getString()中添加getColumnIndex
?你没有显示createSlot()
。是的,正是因为如此,我意识到了我的错误,现在我正在编辑我的代码,我会回答我自己的问题。谢谢D