我正在创建具有大量用户输入的数据的Android应用程序。
我制作了第一部分图像,其中列出了所有数据。现在我需要重新概括一下数据按类别分组的情况。如果有相同等级的物品,则需要将它们放在同一行下并计算它们的数量,并总结它们的质量和价格。
这是我正在显示itemsList:
的代码的一部分public class LogsRecapitulation extends AppCompatActivity {
private ListView mainListView;
private BaseAdapter listAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_listview);
mainListView = (ListView) findViewById(R.id.ListViewItem);
//recieve RecepitID in displayLogs.activity
final long forwardedId = (long) getIntent().getExtras().get(String.valueOf("recepitID"));
List<Logs> logsList = new Select().from(Logs.class).where("Receipt = " + forwardedId).execute();
listAdapter = new RecapitulationArrayAdapter(logsList);
mainListView.setAdapter(listAdapter);
}
private class RecapitulationArrayAdapter extends BaseAdapter {
private LayoutInflater inflater;
private List<Logs> logsList;
public RecapitulationArrayAdapter(List<Logs> logsList) {
inflater = LayoutInflater.from(LogsRecapitulation.this);
this.logsList = logsList;
}
@Override
public int getCount() {
return logsList.size();
}
@Override
public Object getItem(int position) {
return logsList.get(position);
}
@Override
public long getItemId(int position) {
return logsList.get(position).getId();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.logs_recapitulation, parent, false);
}
Logs log = logsList.get(position);
((TextView) convertView.findViewById(R.id.rec_log_sort)).setText(log.sort_id);
((TextView) convertView.findViewById(R.id.rec_log_class)).setText(log.grade);
((TextView) convertView.findViewById(R.id.rec_log_count)).setText(String.valueOf(logsList.size()));
((TextView) convertView.findViewById(R.id.rec_logs_mass)).setText(String.format("%.2f m3", log.getM3()));
if (log.receipt.priceType.equals("Na panju")) {
((TextView) convertView.findViewById(R.id.rec_log_price_default)).setText(String.valueOf(log.price.stumpPrice_kn));
} else {
((TextView) convertView.findViewById(R.id.rec_log_price_default)).setText(String.valueOf(log.price.roadPrice_kn));
}
if (log.receipt.priceType.equals("Na panju")) {
((TextView) convertView.findViewById(R.id.rec_calculated_price)).setText(String.format("%.2f KN", log.price.stumpPrice_kn * log.getM3()));
} else {
((TextView) convertView.findViewById(R.id.rec_calculated_price)).setText(String.format("%.2f KN", log.price.roadPrice_kn * log.getM3()));
}
return convertView;
}
}
这个高级代码并不是那么重要,但对我来说更重要的是按照等级和按等级进行重新分类和分组项目。
问题:我应该如何按排序对每个项目进行分组,并按等级对每个排序组进行分组(就像在图像上一样)? 欢迎任何帮助!
答案 0 :(得分:1)
我无权访问您的数据库架构,但是您可能会使用SQL查询来生成这样的结果,您可以通过&#34;排序&#34;如下:
SELECT Sort, Grade, COUNT(DISTINCT ID) AS Pieces, ROUND(SUM(Mass), 2) AS
TotalMass, Price, SUM(MassPrice) AS TotalMassPrice
FROM LogsTable
GROUP BY Sort, Grade
ORDER BY Sort DESC, Grade DESC;
生成如下表格:
如果给定的Sort-Grade组合的价格不是常数,则此查询存在问题。在这种情况下,您可以使用AVG(Price) AS AveragePrice
而不是Price
,如示例所示。
&#34;总计&#34;可以使用SQL查询生成行:
SELECT COUNT(DISTINCT ID) AS TotalPieces, ROUND(SUM(Mass), 2) AS GrandTotalMass, AVG(Price) AS AveragePrice, SUM(MassPrice) AS GrandTotalMassPrice
FROM LogsTable;
生成如下表格:
我很清楚,屏幕截图中总行中实际报告的数字不是平均价格,而是其他指标。
您可以轻松地将这些SQL查询转换为您选择的查询框架。我还没有这样做,因为你似乎已经证明了如何做到这一点的知识。