Cómo agrupar elementos de la base de datos y mostrarlos – Android

Tengo recibo y registra el modelo en la aplicación android. Recibo tiene muchos registros.

Hice la pregunta para los registros del group_by por sortID y grado.

//recieve RecepitID and query to group logs final long forwardedId = (long) getIntent().getExtras().get(String.valueOf("recepitID")); List<Logs> logsList = new Select().from(Logs.class).where("Receipt = " + forwardedId).groupBy("SortID, Grade").execute(); 

Este agrupamiento funciona bien. El problema es el siguiente. Necesito tener salida como esta (parte en círculo rojo): Introduzca aquí la descripción de la imagen Pero lo tengo así:

Introduzca aquí la descripción de la imagen

Y esto es parte del código cómo hice esto.

 public class LogsRecapitulation extends AppCompatActivity { private ListView mainListView; private BaseAdapter listAdapter; private TextView logsCount; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.recapitulation_listview); mainListView = (ListView) findViewById(R.id.ListViewItem); //recieve RecepitID and query to group logs final long forwardedId = (long) getIntent().getExtras().get(String.valueOf("recepitID")); List<Logs> logsList = new Select().from(Logs.class).where("Receipt = " + forwardedId).groupBy("SortID, Grade").execute(); TextView result = (TextView) findViewById(R.id.LogMassResult); double sum = 0.0; for (int i = 0; i < logsList.size(); i++) { sum += logsList.get(i).getM3(); } result.setText(String.format("%.2f m3", sum)); for (int i = 0; i < logsList.size(); i++) { if (logsList.get(i).receipt.priceType.equals("Na panju")) { TextView stumpPriceKN = (TextView) findViewById(R.id.sumPriceKN); double sumPricekn = 0.0; for (int j = 0; j < logsList.size(); j++) { sumPricekn += logsList.get(j).price.stumpPrice_kn * logsList.get(j).getM3(); } stumpPriceKN.setText(String.format("%.2f KN", sumPricekn)); } else { TextView roadKN = (TextView) findViewById(R.id.sumPriceKN); double roadPrKn = 0.0; for (int j = 0; j < logsList.size(); j++) { roadPrKn += logsList.get(j).price.roadPrice_kn * logsList.get(j).getM3(); } roadKN.setText(String.format("%.2f KN", roadPrKn)); } } for (int i = 0; i < logsList.size(); i++) { if (logsList.get(i).receipt.priceCorrection > 0 && logsList.get(i).receipt.priceType.equals("Na panju")) { TextView corecctionPriceKn = (TextView) findViewById(R.id.correctionPriceKN); double correcSumKN = 0.0; for (int j = 0; j < logsList.size(); j++) { correcSumKN += (logsList.get(j).price.stumpPrice_kn * logsList.get(j).getM3()) + ((logsList.get(j).price.stumpPrice_kn * logsList.get(j).getM3()) * logsList.get(j).receipt.priceCorrection / 100); } corecctionPriceKn.setText(String.format("%.2f KN", correcSumKN)); } else if (logsList.get(i).receipt.priceCorrection > 0 && logsList.get(i).receipt.priceType.equals("Šumska cesta")) { TextView corecctionPriceKn = (TextView) findViewById(R.id.correctionPriceKN); double correcSumKN = 0.0; for (int j = 0; j < logsList.size(); j++) { correcSumKN += (logsList.get(j).price.roadPrice_kn * logsList.get(j).getM3()) + ((logsList.get(j).price.roadPrice_kn * logsList.get(j).getM3()) * logsList.get(j).receipt.priceCorrection / 100); } corecctionPriceKn.setText(String.format("%.2f KN", correcSumKN)); } else { TextView priceHolder = (TextView) findViewById(R.id.KorekcijaCijene); TextView corecctionPriceKn = (TextView) findViewById(R.id.correctionPriceKN); priceHolder.setText(""); corecctionPriceKn.setText(""); } } listAdapter = new RecapitulationArrayAdapter(logsList); mainListView.setAdapter(listAdapter); //display logs count logsCount = (TextView) findViewById(R.id.logsCount); logsCount.setText(String.valueOf(logsList.size())); } 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; } } } 

Estoy usando ActiveAndroid y mostrando esto en listview.

PROBLEMA es con la visualización de estos elementos agrupados. Los estoy mostrando en BaseAdapter listView y me muestra sólo un elemento por grupo, pero necesita mostrarme varios elementos (porque tiene más de 4 elementos en cada grupo).

¿Puede alguien darme consejos qué debo hacer para obtener la salida como en la primera imagen?

Parece que está intentando obtener resultados similares a los siguientes SQL:

 select sort, grade, count(grade), sum(mass), price from logs where receiptid = forwardedId group by sort, grade; 

Se muestra el recuento visualizado computado como logList.size() . En su lugar, si va a tener el grupo de base de datos los registros, usted querrá obtener el recuento de la base de datos también.

Un par de cosas también pueden ayudar. 1. Compruebe la consulta SQL directamente en la base de datos para verificar que está empezando con el conjunto de resultados deseado. Puede utilizar el cliente sqlite3 para probar asumiendo que está utilizando un db de SQLite. 2. Habilitar el registro ActiveAndroid.initialize en ActiveAndroid.initialize

También puede comprobar la ortografía del parámetro para asegurarse de que está haciendo referencia al parámetro intención intencional.

Una vez que compruebe que los resultados de la consulta son correctos, puede centrarse en si lo está haciendo en la lista como desee.

Finalmente tenga cuidado de hacer el trabajo en el hilo de interfaz de usuario.

El usuario 'user650881' tiene razón (no puedo votar desde el repo <50).

Además, para obtener el resumen de la tabla total, puede ejecutar la siguiente consulta SQL:

 select /*sort, grade,*/ count(grade), sum(mass), price from logs where receiptid = forwardedId /*group by sort, grade*/; 

Si usted quisiera tener los artículos agrupados por campos diferentes usted puede también intentar funciones de la viuda es decir:

 select count(grade) over(partition by fieldName) 

Y el grupo por eventualmente no es necesario

  • Tratando de devolver datos de PHP con JSON a Android ...
  • Fuente de luz dentro de una habitación que actúa inesperadamente
  • ¿Cómo comprobar el nombre del certificado y el alias en los archivos del almacén de claves?
  • Acceso de dominio a través de subprocesos con rxjava y dagger2
  • Recibiendo la respuesta del eco del HTTP POST de un archivo de PHP (enviar los POSTS funciona muy bien, es el recibir que no puedo imaginar)
  • Problemas de serialización de RealmList (Realm / Gson / Intent)
  • ¿Cómo puedo adjuntar archivos de recursos de cadena diferentes durante las versiones de lanzamiento y depuración de hormigas android?
  • AndroidPDFViewer - No se puede abrir el documento pdf en mi aplicación
  • Hacer clic en el elemento giratorio dentro de la ventana emergente causa WindowManager $ BadTokenException
  • Documentación de protobuf nano de Android
  • Cómo deshacerse de la advertencia: Utilice '$' en lugar de '.' Para clases internas en Eclipse
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.