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

9 respostas Resolvido
Welder_Mascarado

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.

9 Respostas

D

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

Welder_Mascarado

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

lvbarbosa

É 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.

Welder_Mascarado

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 !!

Welder_Mascarado

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.

Welder_Mascarado

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…

Welder_Mascarado

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

ursopolar
Solucao aceita

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!

jonas.cant

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! =(

Criado 17 de fevereiro de 2017
Ultima resposta 20 de fev. de 2017
Respostas 9
Participantes 5