#java #android #sqlite
#java #Android #sqlite
Вопрос:
В настоящее время я студент уровня A, проходящий контрольную оценку по информатике уровня A. Я работаю в Android Studio, используя Java, XML и SQLite, ни один из которых я раньше не использовал. Я создаю приложение Scout Manager.
В настоящее время я работаю над отображением сведений о событии, в частности имен и разделов каждого разведчика, который был приглашен на мероприятие, и это должно отображаться в ListView. Единственная проблема в том, что, хотя на это событие в базе данных были приглашены 4 разведчика, отображаются только 3 — или отображается слишком мало разведчиков.
Следует отметить, что существуют отдельные таблицы для событий, приглашений и разведчиков. Таблица приглашений сопоставляет идентификатор посещаемого события и идентификатор скаута, который его посещает, поэтому я нахожу все приглашения на определенное событие, а затем отдельных скаутов, посещающих мероприятие, перед отображением сведений о скауте.
Вот код, используемый для получения приглашений для данного события из базы данных, из моего класса DatabaseHandler:
public Cursor getEventInvites(int sessionid) {
String[] columns={COLUMN_INID " AS " BaseColumns._ID, COLUMN_SEID, COLUMN_SCID};
String selection=COLUMN_SEID " =? ";
String[] selectionArgs={String.valueOf(sessionid)};
Cursor cursor=db.query(TABLE_INVITES, columns, selection, selectionArgs, null, null, null);
return cursor;
}
Вот код, используемый для отображения сведений в ListBox:
ListView scoutslist = findViewById(R.id.listScouts);
scoutdetailslist=new ArrayList<String>();
scoutadapter=new ArrayAdapter<String>(context, android.R.layout.simple_list_item_multiple_choice, scoutdetailslist);
//ArrayList<int>
Cursor invites;
invites=DatabaseHandler.getEventInvites(sessionid);
invites.moveToFirst();
try {
while (invites.moveToNext()) {
int ScoutID = invites.getInt(invites.getColumnIndex(DatabaseHandler.COLUMN_SCID));
Cursor scout = DatabaseHandler.getScout(ScoutID);
String forename = scout.getString(scout.getColumnIndex(DatabaseHandler.COLUMN_FNAME));
String surname = scout.getString(scout.getColumnIndex(DatabaseHandler.COLUMN_LNAME));
String section = scout.getString(scout.getColumnIndex(DatabaseHandler.COLUMN_SECTION));
String ScoutBasicDetails = forename " " surname ", " section;
scoutdetailslist.add(ScoutBasicDetails);
}
} finally {
invites.close();
}
scoutslist.setAdapter(scoutadapter);
И вот код, используемый для получения сведений о разведчике из базы данных.
public Cursor getScout(int scoutid) {
String[]columns={COLUMN_SCID, COLUMN_FNAME, COLUMN_LNAME, COLUMN_DOB, COLUMN_SECTION, COLUMN_SEX, COLUMN_ADD1, COLUMN_ADD2, COLUMN_CITY, COLUMN_POST, COLUMN_RELIGION, COLUMN_ENAME, COLUMN_EHOME, COLUMN_EMOB, COLUMN_EEMAIL, COLUMN_MED, COLUMN_ALL, COLUMN_TET, COLUMN_SWIM, COLUMN_SCHOOL, COLUMN_PHOTO, COLUMN_MOVE};
String selection = COLUMN_SCID " =? ";
String[] selectionArgs={String.valueOf(scoutid)};
Cursor cursor=db.query(TABLE_SCOUTS, columns, selection, selectionArgs, null, null, null);
if (cursor!=nullamp;amp;cursor.moveToFirst()) {
cursor.moveToFirst();
} else {
cursor=null;
}
return cursor;
}
Любая помощь была бы оценена — кроме того, я новичок в этом и довольно устал, поэтому, если я упустил важные детали или был неясен, пожалуйста, не стесняйтесь оставлять комментарий и просить меня изменить вопрос.
Ответ №1:
Вы переходите к первому элементу, а затем сразу переходите к следующему элементу (таким образом, пропуская первый элемент):
invites.moveToFirst();
try {
while (invites.moveToNext()) {
Рассмотрим цикл do while, который выполняется только в том случае, если moveToFirst()
вызов выполнен успешно.