1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Como faço para somar as quantidades em uma listview com itens iguais armazenados em uma ArrayList do firebase.

Tenho uma ListView que exibe o PRODUTO | VALOR | QTD. Esta ListView é carregada a partir de dados armazenados no firebase. A ListView contem produtos iguais cadastrados por diversos clientes, com valores aleatorios e qtd. Faço a seleção dos produtos iguais e exibo apenas um gual com o valor menor. O que estou co dificuldade é de fazer a soma de todos os produtos iguais. Segue o que tenho feito dentro do onDataChange.

final List<String> listpro = new ArrayList<>();
final List<Double> listvlr = new ArrayList<>();
final List<Integer> listqtd = new ArrayList<>()

final DatabaseReference bdCotacao;
bdCotacao = FirebaseDatabase.getInstance().getReference();
@Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                produto1.clear();
                String sp = null;
                Double sv;
                int sq = 0, soma = 0;
                for (DataSnapshot dados:dataSnapshot.getChildren()) {
                    //RECUPERO SO PRODUTOS, VALORES E QTD DO FIREBASE
                    String produto = dados.child("produtoCotacao").getValue(String.class);
                    Double valorm = dados.child("valorCotacao").getValue(Double.class);
                    Integer quantidade = dados.child("qtdCotacao").getValue(Integer.class);
                    //AQUI SOMO A QUANTIDADE E EXIBO
                    soma+=quantidade;

                    Cotacao itemProduto = new Cotacao();

                    listpro.add(dados.child("produtoCotacao").getValue(String.class));
                    listvlr.add(dados.child("valorCotacao").getValue(Double.class));
                    listqtd.add(dados.child("qtdCotacao").getValue(Integer.class));

                    Iterator itp = listpro.iterator();
                    Iterator itv = listvlr.iterator();
                    Iterator itq = listqtd.iterator();

                        //SELECIONO APENAS UM PRODUTO IGUAL, COM O VALOR MININO E EXIBO NA LISTVIEW
                        while(itp.hasNext()) {
                        sp = (String) itp.next();
                        sv = (Double) itv.next();
                        sq = (Integer) itq.next();
                        for(int i = 0; i < produto1.size(); i++) {
                            Cotacao p = produto1.get(i);
                            if (!produto1.contains(sp) && p.getProdutoCotacao().equals(sp)) {
                                if (p.getValorCotacao() > sv) {
                                    produto1.remove(p);
                                }
                            }
                        }
                    }
                    //ADICIONO NA LISTVIEW OS DADOS
                    itemProduto.setProdutoCotacao(produto);
                    itemProduto.setValorCotacao(valorm);
                    itemProduto.setQtdCotacao(soma);
                    produto1.add(itemProduto);
                }
                adapter.notifyDataSetChanged();
                progressDialog.dismiss();
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

O código funciona, mas o problema é que ele soma os três primeiros produtos iguais, exibe o valor, mas os próximos ele vai somando e acrescentado.

Os dados do DataBse do firebase estão assim:

Produto: Albendazol Líquido Item Igual nº: 1 QDT: 3 Qtd Tot: 3

Produto: Albendazol Líquido Item Igual nº: 2 QDT: 2 Qtd Tot: 5

Produto: Albendazol Líquido Item Igual nº: 3 QDT: 3 Qtd Tot: 8 // VEJA QUE AQUI ELE SOMA OS TRÊS PRIMEIROS E DAR O RESULTADO

Produto: Albendazol comp. Item Igual nº: 1 QDT: 6 Qtd Tot: 14 // VEJA QUE AQUI ELE CONTINUOU A SOMAR, O 8 DO TOTAL ANTERIOR + 6 DESTE PRODUTO. E, ASSIM POR DIANTE.

Produto: Albendazol comp. Item Igual nº: 2 QDT: 8 Qtd Tot: 22

Produto: Albendazol comp. Item Igual nº: 3 QDT: 6 Qtd Tot: 28

Produto: Ambroxol Adulto Xarope Item Igual nº: 1 QDT: 6 Qtd Tot: 34

Produto: Atenolol 25mg comp. Item Igual nº: 1 QDT: 3 Qtd Tot: 37

Produto: Atenolol 25mg comp. Item Igual nº: 2 QDT: 6 Qtd Tot: 43

Produto: Atenolol 25mg comp. Item Igual nº: 3 QDT: 7 Qtd Tot: 50

Produto: Bromexina Adulto Xarope Item Igual nº: 1 QDT: 7 Qtd Tot: 57

Como faço para parar a somas dos primeiros produtos iguais, exibir o resultado, e depois continuar a somar o próximos e fazer a exibição. Segue a imagem como fica exibido na tela do aplicativo:

https://www.filepicker.io/api/file/Ua37rKWR1SssciqswlyA

Alguém pode me ajudar a fazer este código.

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java android ou faça a sua própria pergunta.