java - ListView 仅显示数据库中匹配条件集的 4 条记录中的 3 条

标签 java android sqlite

我是一名 A Level 学生,目前正在进行 A Level 计算机科学控制评估。我正在 Android Studio 中工作,使用 Java、XML 和 SQLite,但我以前从未使用过这些。我正在构建一个 Scout Manager 应用程序。

我目前正在努力显示 Activity 详细信息,特别是受邀参加 Activity 的每个侦察兵的姓名和部分,这将显示在 ListView 中。唯一的问题是,虽然数据库中已邀请 4 名球探参加此 Activity ,但仅显示 3 名 - 或者,显示的球探太少。

应该注意的是, Activity 、邀请和球探有单独的表格。邀请表将正在参加的 Activity 的 ID 以及正在参加该 Activity 的球探的 ID 相匹配 - 因此,我会找到某个 Activity 的所有邀请,然后是参加该 Activity 的各个球探,然后再显示该 Activity 的详细信息侦察兵。

以下是用于从我的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;
}

以下是用于在列表框中显示详细信息的代码:

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;
}

任何帮助将不胜感激 - 另外,我对此很陌生,而且很累,所以如果我遗漏了重要细节或不清楚,请随时发表评论并要求我修改问题.

最佳答案

您正在移至第一项,然后立即移至下一项(从而跳过第一项):

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

考虑一个 do while 循环,仅当 moveToFirst() 调用成功时才执行。

关于java - ListView 仅显示数据库中匹配条件集的 4 条记录中的 3 条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55525042/

相关文章:

java - 在调用 removeCallbacks() 时,在新线程上启动的可运行对象不会停止

java - 如何使其成为更简单的代码(Java,简单的字符串输入,说明它是否正确)

android - 将我的位置标记显示在所有其他标记之上

android - 在 SQLite 中按选择参数的顺序对查询结果进行排序

java - 有约束的图中两个坐标点之间的最短路径数

java - springMVC中的Httpsession管理

java - MjpegView 与其他 XML 布局

java - Android Wear - 长时间运行的应用程序丢失状态

android - 如何更新具有从 Sqlite 填充的 Gridview 的 fragment

python-2.7 - 使 SQLite 更快地运行 SELECT