为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

手掌心 2022-09-22 16:36:03

我是一名A级学生,目前正在进行A Level计算机科学控制评估。我在安卓工作室工作,使用爪哇,XML和SQLite,我以前都没有使用过。我正在构建一个侦察管理器应用程序。


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


应该指出的是,活动,邀请和侦察员有单独的表格。邀请表将参加活动的ID和参加活动的侦察员的ID匹配在一起 - 因此,在显示侦察兵的详细信息之前,我找到参加某个活动的所有邀请,然后是参加活动的个人侦察员。


下面是用于从数据库(从我的数据库Handler类)获取给定事件的邀请的代码:


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


任何帮助将不胜感激 - 而且,我是新手,而且很累,所以如果我遗漏了重要的细节或不清楚,请不要犹豫,发表评论并要求我修改问题。


查看完整描述

1 回答

?
斯蒂芬大帝

TA贡献1487条经验 获得超7个赞

您将移动到第一项,然后立即移动到下一项(从而跳过第一项):


invites.moveToFirst();

try {

    while (invites.moveToNext()) {

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


查看完整回答
反对 回复 2022-09-22

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信