有没有比我要提出的更简单的方法来分组和呈现来自 SQLite 数据库的数据?如果是这样,你会如何改进它?
在我为健身房做的应用程序中,我需要能够按日期、降序(最新在顶部)记录 5 种类型的锻炼课程的历史记录。本着分享代码以更好地理解的精神,这是我的表创建:
private static final String CREATE_TABLE_BJJ = "CREATE TABLE IF NOT EXISTS "
// TODO finish this
+ TABLE_BJJ + "(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ BJJ_HISTORY_MOVE + " TEXT NOT NULL, " + BJJ_HISTORY_MOVECOUNT + " INTEGER NOT NULL, "
+ BJJ_HISTORY_PERFORMEDBY + " TEXT NOT NULL, " + BJJ_HISTORY_PERFORMEDTO
+ " TEXT NOT NULL, " + DATE + " datetime NOT NULL, " + UPLOADED
+ " INTEGER NOT NULL DEFAULT 0);";
一旦数据被记录,这会导致类似这样的结果:
但是,对于历史页面,我需要以某种方式将按日期执行的所有移动分组到一行中,其中包含执行移动次数的总和,如下面的屏幕截图所示:
我想的可能是用 SELECT DISTINCT STATEMENT 的结果填充一个数组,然后用这样的结果填充一个数组:
String query ="SELECT DISTINCT Date FROM BJJHistory";
ArrayList<String> dateList = new ArrayList<String>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Cursor cursor = database.rawQuery(query,null);
if (cursor != null) {
cursor.moveToFirst();
if (!cursor.isAfterLast())
{
do
{
String datestr = sdf.format(new Date(cursor.getString(0)));
dateList.add(datestr);
}
while (cursor.moveToNext());
}
}
return cursor;
我有一个自定义类来保存结果:
Public class History {
public String numMoves;
public String date;
public History() {
super();
}
public History(final String numMoves, final String date) {
super();
this.numMoves = numMoves;
this.date = date;
}
}
之后,使用数组创建游标以将数据拉回,如下所示:
final ArrayList<History> BJJHistory = new ArrayList<History>();
for (int i = 0; dateList.size(); i++) {
final Cursor cursor = db.rawQuery("SELECT COUNT(*) FROM BJJHistory WHERE Date LIKE '" + dateList(i).toString() + "%'") > 0, null);
if (cursor != null) {
cursor.moveToFirst();
BJJHistory.add(new History(cursor.getString(0).toString(),dateList[i].toString()))
}
很多打字
最后,使用数组适配器用生成的历史项目数组列表填充列表视图。我仍然需要使用一种方法来实现一个 onclick 侦听器,该侦听器会在数据库中查询每个日期的所有项目,因此用户可以看到他们在该日期做了什么动作,但现在主列表视图更重要。
一如既往,提前致谢!