Приветствую всех. Я пытаюсь перебрать ряд значений, чтобы заполнить представление списка из базы данных. Насколько я могу сказать, код должен работать. По какой-то причине оператор выбора использует другое значение вместо того, что я ему говорю.
Это в моем адаптере, я должен иметь возможность ввести "1" (save_slot) и "91" (элемент), чтобы получить значение 1 и значение 2.
public Cursor fetchItem(String saveslot, String item) throws SQLException {
Cursor mCursor =
mDb.query(true, DATABASE_PUSHERS_TABLE, new String[] {KEY_PROWID,
SAVE_SLOT,ITEM,VALUE1,VALUE2}
,SAVE_SLOT + " = " + saveslot + " AND "+ITEM + " = " + item, null,
null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
По какой-то причине при выполнении выбранного выбора он использует соответствующее значение 1 вместо элемента. Таким образом, он ищет слот save_slot "1", но вместо поиска элемента "91" он ищет значение value1 "91", которое равно "EMPTY SLOT". Поэтому он ищет saveslot = 1 и item = EMPTY SLOT, которого не существует.
LogCat:
DEBUG/ITEM CHECK: SAVESLOT #: 0
DEBUG/ITEM CHECK: ITEMSLOT #: 0
DEBUG/ITEM CHECK: ITEM #: 91
DEBUG/ITEM CHECK: ITEMSLOT #: 1
DEBUG/ITEM CHECK: ITEM #: 99
DEBUG/ITEM CHECK: ITEMSLOT #: 2
DEBUG/ITEM CHECK: ITEM #: 98
DEBUG/ITEM CHECK: ITEMSLOT #: 3
DEBUG/ITEM CHECK: ITEM #: 97
DEBUG/ITEM CHECK: ITEMSLOT #: 4
DEBUG/ITEM CHECK: ITEM #: 96
DEBUG/ITEM CHECK: ITEMSLOT #: 5
DEBUG/ITEM CHECK: ITEM #: 95
DEBUG/ITEM CHECK: ITEMSLOT #: 6
DEBUG/ITEM CHECK: ITEM #: 94
DEBUG/ITEM CHECK: ITEMSLOT #: 7
DEBUG/ITEM CHECK: ITEM #: 93
DEBUG/ITEM CHECK: ITEMSLOT #: 8
DEBUG/ITEM CHECK: ITEM #: 100
DEBUG/ITEM CHECK: ITEMSLOT #: 9
DEBUG/ITEM CHECK: ITEM #: 90
DEBUG/ITEM CHECK: SAVESLOT #: 1
DEBUG/ITEM CHECK: ITEMSLOT #: 0
@this should be item 91 NOT "EMPTY SLOT"
@DEBUG/ITEM CHECK: ITEM #: EMPTY SLOT
DEBUG/AndroidRuntime: Shutting down VM
WARN/dalvikvm(8300): threadid=3: thread exiting with uncaught exception (group=0x4001b390)
ERROR/AndroidRuntime(8300): Uncaught handler: thread main exiting due to uncaught exception
ERROR/AndroidRuntime(8300): java.lang.RuntimeException: Unable to resume activity {circle.pusherb/circle.pusherb.SaveScreen}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
ERROR/AndroidRuntime(8300): Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
ERROR/AndroidRuntime(8300): at circle.pusherb.SaveScreen.fillData(SaveScreen.java:77)
КОД:
private void fillData() {
Cursor note = null;
String[] from = InfoItemList;
int SaveSlot = 1;
int x = 0;
for (SaveSlot = 0;SaveSlot < 3;SaveSlot++ ){
Log.d("ITEM CHECK: SAVESLOT #", Integer.toString(SaveSlot));
for ( x = 0; x<(InfoItemList.length); x++){
note = mDbHelper.fetchItem(Integer.toString(SaveSlot),InfoItemList[x]);
startManagingCursor(note);
Log.d("ITEM CHECK: ITEMSLOT #", Integer.toString(x));
Log.d("ITEM CHECK: ITEM #", InfoItemList[x]);
from[x] = note.getString(
note.getColumnIndexOrThrow(pusherDbAdapter.VALUE1));
}
}
int[] to = new int[]{R.id.text1, R.id.text2, R.id.text3,
R.id.text5,R.id.text6,R.id.text7,R.id.text8,R.id.text9
,R.id.text10};
SimpleCursorAdapter notes =
new SimpleCursorAdapter(this, R.layout.pusherlist_row, null, from, to);
setListAdapter(notes);
}
//InfoItemList[] contains numbers 90 to 100 except 92.
//EMPTY SLOT is currently the value returned when a record containing item 91 and save_slot 1-3.