Chamada do Metodo dentro de um laço Do... While só funciona uma vez

Boa tarde, estou exibindo valores da minha tabela de itens porem preciso somar os que estão repetidos. Quando chamo o método que soma os valores ele funciona com o primeiro item, porem o laço termina apenas com a primeira soma. alguém pode me explicar o que ocorre? vou explicar melhor abaixo:

meu laço :

Do {
ItemPedido tabelaItem = new ItemPedido();

            tabelaItem.setProduto(produto);
            tabelaItem.setQuantidade (somaItens(tabelaItem.getProduto);

           lista.add(tabelaItem);

} while …

O método somaItens funciona bem porem o resultado só me mostra uma linha da tabela

exemplo de resultado:

Produto Quantidade
milho 10

Porem se eu testo o meu laço assim por exemplo sem o método somaItens :

Do {
ItemPedido tabelaItem = new ItemPedido();

            tabelaItem.setProduto(produto);
            tabelaItem.setQuantidade ( 1 );

           lista.add(tabelaItem);

} while …

ele me retorna isso:

Produto Quantidade
Alface 1
tomate 1
milho 1

??? Os itens repetidos estao corretos. Mas se eu utilizo o metodo somaItens ele apenas me devolve o valor exato do primeiro item. Os demais nao exibe.

Os métodos somaItens ou getProduto podem estar influenciando a condição do while

Obrigado, mas o que vc sugere ou acha que pode estar acontecendo?

É bem difícil diagnosticar o teu problema assim. A explicação está bem desconexa e confusa. Quando você for explicar algo, algo que ajuda a faze-lo melhor é fingir que você está explicando para uma criança (no sentido de que o ouvinte está totalmente alheio à situação). Não omita detalhes fundamentais para o entendimento do contexto, eles fazem toda a diferença.

Você omitiu a parte mais importante do do...while, a condição de parada. Eu apostaria que o problema está ali.

OK Ivbarbosa. vou voltar a programar este fim de semana e posto o código correto. Como não trabalho na área estava no expediente quando postei as informações acima. Obrigado a todos !!

Bom dia amigos. Segue o codigo que esta me dando trabalho…

public List listaItensDaRotaTeste(int n) {

    ArrayList<ItemPedido> lista = new ArrayList<ItemPedido>();




    try {

        bancoDados = ctx.openOrCreateDatabase(NOME_BANCO, Context.MODE_WORLD_WRITEABLE, null);


        cursorItemPedido = bancoDados.rawQuery( "SELECT DISTINCT ITEM_PRODUTO  FROM ITEM " + TABELA_ITEM + "  WHERE ITEM_ROTA = " + n ,null);


        //   cursorItemPedido = bancoDados.rawQuery( "SELECT ITEM_PRODUTO, COUNT(*) ITEM_QUANTIDADE FROM ITEM GROUP BY ITEM_PRODUTO ",null);


        //  cursorItemPedido = bancoDados.rawQuery( "SELECT ITEM_PRODUTO, COUNT (*) ITEM_QUANTIDADE  FROM ITEM GROUP BY ITEM_PRODUTO",null);




        if (cursorItemPedido != null && cursorItemPedido.getCount() != 0) {

            cursorItemPedido.moveToFirst();


           do  {


                ItemPedido tabelaItem = new ItemPedido();


                tabelaItem.setProduto(cursorItemPedido.getString(cursorItemPedido.getColumnIndex(ITEM_PRODUTO)));


                tabelaItem.setQuantidade(Integer.parseInt(cursorItemPedido.getString(cursorItemPedido.getColumnIndex("ITEM_QUANTIDADE"))));


                



                   lista.add(tabelaItem);




            } while (cursorItemPedido.moveToNext());




        }


        if (cursorItemPedido != null) {
            cursorItemPedido.close();
        }


    } catch (Exception e) {
        e.printStackTrace();
    } finally {

    }
    if (bancoDados != null) {
        bancoDados.close();
    }





    return lista;


}

se coloco o codigo acima ele me devolve:

PRODUTO / QUANTIDADE
MILHO / 2
ALFACE / 3
MILHO/ 2

Porem se eu alterar o “tabelaItem.setQuantidade” e chamar o metodo que soma a quantidade de cada item de acordo com o nome, o metodo para de iterar e me mostra apenas o primeiro resultado:

ItemPedido tabelaItem = new ItemPedido();

                tabelaItem.setProduto(cursorItemPedido.getString(cursorItemPedido.getColumnIndex(ITEM_PRODUTO)));


                //tabelaItem.setQuantidade(Integer.parseInt(cursorItemPedido.getString(cursorItemPedido.getColumnIndex("ITEM_QUANTIDADE"))));


                  tabelaItem.setQuantidade(somaQtdItens(tabelaItem.getProduto()));

PRODUTO/QUANTIDADE
MILHO/4

e encerra nao me devolvendo mais nada.

Segue o codigo do SomaQtdItens:

public int somaQtdItens( String produto ) {

    int total = 0;


        bancoDados = ctx.openOrCreateDatabase(NOME_BANCO, Context.MODE_WORLD_WRITEABLE, null);


        cursorItemPedido = bancoDados.rawQuery("SELECT SUM( ITEM_QUANTIDADE) FROM ITEM WHERE ITEM_PRODUTO ='" + produto + "'", null);

        if (cursorItemPedido.moveToFirst()) {

            total = cursorItemPedido.getInt(0);// o argumento é o int

        }


        return total;

    }

ja descobri que o erro esta no cursor do metodo mas não sei como consertar e nem o porque esta com este erro…

Galera muito obrigado a todos. Fazendo alguns testes descobri que meu cursor estava em duplicidade nos dois metodos e por isso estava com esta falha. Obrigado a todos prometo que vou ser mais claro da proxima. ate mais

1 curtida

Tenta criar outro cursor no método soma. Pois você usa o mesmo na soma e quando volta ele já está com os valores alterados.

Edit: Good!

Quando você for explicar algo, algo que ajuda a faze-lo melhor é fingir que você está explicando para uma criança (no sentido de que o ouvinte está totalmente alheio à situação)

Ah se todo Analista de Sistemas seguisse esse método pros programadores! =(

1 curtida