java - ListView 仅显示来自数据库匹配条件集的 4 条记录中的 3 条
问题描述
我是一名 A Level 学生,目前正在通过我的 A Level 计算机科学控制评估。我在 Android Studio 中工作,使用 Java、XML 和 SQLite,这些我以前都没有使用过。我正在构建一个 Scout Manager 应用程序。
我目前正在显示事件详细信息,特别是受邀参加事件的每个 Scout 的名称和部分,这将显示在 ListView 中。唯一的问题是,虽然数据库中已邀请 4 名童军参加此活动,但仅显示了 3 名 - 或者,显示的童军人数太少。
应该注意的是,活动、邀请和球探有单独的表格。邀请表将正在参加的活动的 id 和正在参加的球探的 id 匹配在一起 - 因此,我找到了某个活动的所有邀请,然后是参加该活动的个人球探,然后再显示详细信息侦察。
这是用于从我的 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;
}
任何帮助将不胜感激 - 另外,我是新手,而且很累,所以如果我遗漏了重要细节或不清楚,请不要犹豫,发表评论并要求我修改问题。
解决方案
您正在移动到第一个项目,然后立即移动到下一个项目(因此跳过第一个项目):
invites.moveToFirst();
try {
while (invites.moveToNext()) {
moveToFirst()
考虑一个只有在调用成功时才执行的 do while 循环。
推荐阅读
- python - BeautifulSoup4 循环找不到后续元素
- swagger-ui - 如何替换 Quarkus Swagger UI?
- javascript - break 说错误:跳转目标不能跨越函数边界。打字稿
- r - 在 R 降价文件中渲染十六进制颜色内联
- python - 如何始终从头开始编写代码?
- javascript - Devo nodejs-sdk不发送数据
- .net - 正则表达式 - 带替换的可选组
- angular-ivy - Angular 8 - Building with IVY - how to interpret the error messages
- python - 在同一行打印 2 个列表项
- javascript - 在不超过最大执行时间的情况下列出谷歌驱动器中的所有文件