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.
- Evitando! = Null utilizando un método en java
- Cuando se destruyen los recursos estáticos, ¿se matan todos o pueden quedarse algunos en casos raros?
- Java: ¿Cómo analizar el formato de fecha para mostrar el formato de salida específico?
- ¿Cómo cambiar la instantánea mostrada por la lista de aplicaciones recientes?
- ¿Cómo implemento el tipo de curl de página utilizado en Google Play Books?
//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): Pero lo tengo así:
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?
- ¿Cómo puedo obtener el valor entre paréntesis en una cadena
- Excepción al intentar agregar un BeaconParser a AltBeacon lib
- eliminar% 0A de la cadena
- "Id no puede ser cero" - GoogleJsonResponseException 400 Petición incorrecta
- ¿Cómo configurar el nombre del hilo?
- Hacer un mensaje Toast de un hilo independiente
- ¿Es mejor práctica de código para registrar un receptor en manifiesto o en código?
- Archivo de 0 bytes aparece al capturar la pantalla por screencap
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
- Temporizador Android actualizando una vista de texto (UI)
- ¿Cómo puedo saber si mi WebView está cargado al 100%?