如何在 android studio 中对具有多种条件的 sqlite 进行排序?
How to sort sqlite with many conditions in android studio?
我必须优先排序我的列表视图。首先,我需要按截止日期对列表视图进行排序,如果截止日期相同,则需要按评估分数对其进行排序。如果评估分数相同,那么我需要按完成时间排序。这是一个计划程序应用程序。我可以知道如何排序吗?我是 android 工作室的新手。我通过 youtube 教程构建了代码。
listDataAdapter=new ListDataAdapter(getApplicationContext(),R.layout.row_layout);
listview.setAdapter(listDataAdapter);
userDBHelper=new UserDbHelper(getApplicationContext());
sqLiteDatabase=userDBHelper.getReadableDatabase();
cursor=userDBHelper.getInformation(sqLiteDatabase);
if (cursor.moveToFirst())
{
do {
String title,duedate,time_submission,time_completion,assessmentmark;
title=cursor.getString(0);
duedate=cursor.getString(1);
time_submission=cursor.getString(2);
time_completion=cursor.getString(3);
assessmentmark=cursor.getString(4);
DataProvider dataProvider=new DataProvider(title,duedate,time_submission,time_completion,assessmentmark);
listDataAdapter.add(dataProvider);
}while (cursor.moveToNext());
}
public Cursor getInformation(SQLiteDatabase db)
{
Cursor cursor;
String[] projections={UserData.NewTaskInfo.TITLE, UserData.NewTaskInfo.DUEDATE, UserData.NewTaskInfo.TIME_SUBMISSION,
UserData.NewTaskInfo.TIME_COMPLETION, UserData.NewTaskInfo.ASSESSMENTMARK};
cursor=db.query(UserData.NewTaskInfo.TABLE_NAME,projections,null,null,null,null,null);
return cursor;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row=convertView;
layoutHandler layoutHandler;
if (row==null)
{
LayoutInflater layoutInflater=(LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row=layoutInflater.inflate(R.layout.row_layout,parent,false);
layoutHandler =new layoutHandler();
layoutHandler.TITLE=(TextView) row.findViewById(R.id.text_title);
layoutHandler.DUEDATE=(TextView)row.findViewById(R.id.text_duedate);
layoutHandler.TIMESUBMISSION=(TextView)row.findViewById(R.id.text_time_submission);
layoutHandler.TIMECOMPLETION=(TextView)row.findViewById(R.id.text_time_completion);
layoutHandler.ASSESSMENTMARK=(TextView)row.findViewById(R.id.text_assessmentmark);
row.setTag(layoutHandler);
}else{ //if the row already existing
layoutHandler=(layoutHandler) row.getTag();
}
DataProvider dataProvider=(DataProvider) this.getItem(position);
layoutHandler.TITLE.setText(dataProvider.getTitle());
layoutHandler.DUEDATE.setText(dataProvider.getDuedate());
layoutHandler.TIMESUBMISSION.setText(dataProvider.getTime_submission());
layoutHandler.TIMECOMPLETION.setText(dataProvider.getTime_completion());
layoutHandler.ASSESSMENTMARK.setText(dataProvider.getAssessmentmark());
return row;
}
query() method 的第七个参数是一个 SQL ORDER BY 子句。
这样的子句can speficy multiple columns:
String[] projections={UserData.NewTaskInfo.TITLE, UserData.NewTaskInfo.DUEDATE, UserData.NewTaskInfo.TIME_SUBMISSION,
UserData.NewTaskInfo.TIME_COMPLETION, UserData.NewTaskInfo.ASSESSMENTMARK};
String orderBy = UserData.NewTaskInfo.DUEDATE + "," +
UserData.NewTaskInfo.ASSESSMENTMARK + "," +
UserData.NewTaskInfo.TIME_COMPLETION;
cursor = db.query(UserData.NewTaskInfo.TABLE_NAME, projections, null,
null, null, null, orderBy);
我必须优先排序我的列表视图。首先,我需要按截止日期对列表视图进行排序,如果截止日期相同,则需要按评估分数对其进行排序。如果评估分数相同,那么我需要按完成时间排序。这是一个计划程序应用程序。我可以知道如何排序吗?我是 android 工作室的新手。我通过 youtube 教程构建了代码。
listDataAdapter=new ListDataAdapter(getApplicationContext(),R.layout.row_layout);
listview.setAdapter(listDataAdapter);
userDBHelper=new UserDbHelper(getApplicationContext());
sqLiteDatabase=userDBHelper.getReadableDatabase();
cursor=userDBHelper.getInformation(sqLiteDatabase);
if (cursor.moveToFirst())
{
do {
String title,duedate,time_submission,time_completion,assessmentmark;
title=cursor.getString(0);
duedate=cursor.getString(1);
time_submission=cursor.getString(2);
time_completion=cursor.getString(3);
assessmentmark=cursor.getString(4);
DataProvider dataProvider=new DataProvider(title,duedate,time_submission,time_completion,assessmentmark);
listDataAdapter.add(dataProvider);
}while (cursor.moveToNext());
}
public Cursor getInformation(SQLiteDatabase db)
{
Cursor cursor;
String[] projections={UserData.NewTaskInfo.TITLE, UserData.NewTaskInfo.DUEDATE, UserData.NewTaskInfo.TIME_SUBMISSION,
UserData.NewTaskInfo.TIME_COMPLETION, UserData.NewTaskInfo.ASSESSMENTMARK};
cursor=db.query(UserData.NewTaskInfo.TABLE_NAME,projections,null,null,null,null,null);
return cursor;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row=convertView;
layoutHandler layoutHandler;
if (row==null)
{
LayoutInflater layoutInflater=(LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row=layoutInflater.inflate(R.layout.row_layout,parent,false);
layoutHandler =new layoutHandler();
layoutHandler.TITLE=(TextView) row.findViewById(R.id.text_title);
layoutHandler.DUEDATE=(TextView)row.findViewById(R.id.text_duedate);
layoutHandler.TIMESUBMISSION=(TextView)row.findViewById(R.id.text_time_submission);
layoutHandler.TIMECOMPLETION=(TextView)row.findViewById(R.id.text_time_completion);
layoutHandler.ASSESSMENTMARK=(TextView)row.findViewById(R.id.text_assessmentmark);
row.setTag(layoutHandler);
}else{ //if the row already existing
layoutHandler=(layoutHandler) row.getTag();
}
DataProvider dataProvider=(DataProvider) this.getItem(position);
layoutHandler.TITLE.setText(dataProvider.getTitle());
layoutHandler.DUEDATE.setText(dataProvider.getDuedate());
layoutHandler.TIMESUBMISSION.setText(dataProvider.getTime_submission());
layoutHandler.TIMECOMPLETION.setText(dataProvider.getTime_completion());
layoutHandler.ASSESSMENTMARK.setText(dataProvider.getAssessmentmark());
return row;
}
query() method 的第七个参数是一个 SQL ORDER BY 子句。 这样的子句can speficy multiple columns:
String[] projections={UserData.NewTaskInfo.TITLE, UserData.NewTaskInfo.DUEDATE, UserData.NewTaskInfo.TIME_SUBMISSION,
UserData.NewTaskInfo.TIME_COMPLETION, UserData.NewTaskInfo.ASSESSMENTMARK};
String orderBy = UserData.NewTaskInfo.DUEDATE + "," +
UserData.NewTaskInfo.ASSESSMENTMARK + "," +
UserData.NewTaskInfo.TIME_COMPLETION;
cursor = db.query(UserData.NewTaskInfo.TABLE_NAME, projections, null,
null, null, null, orderBy);