ListView отображает только 3 из 4 записей из набора критериев соответствия базы данных - PullRequest
0 голосов
/ 05 апреля 2019

Я учусь на уровне и в настоящее время прохожу аттестацию по компьютерным наукам. Я работаю в 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!=null&&cursor.moveToFirst()) {
        cursor.moveToFirst();
    } else {
        cursor=null;
    }
    return cursor;
}

Буду признателен за любую помощь - также, я новичок в этом, и довольно устал, поэтому, если я пропустил важные детали или был неясен, пожалуйста, не стесняйтесь оставить комментарий и попросить меня изменить вопрос .

1 Ответ

2 голосов
/ 05 апреля 2019

Вы переходите к первому элементу, а затем сразу переходите к следующему элементу (таким образом пропуская первый элемент):

invites.moveToFirst();
try {
    while (invites.moveToNext()) {

Рассмотрим цикл do while, который выполняется только в случае успешного вызова moveToFirst().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...