Thiago fiz o teste e realmente o progress fica rodando apesar de passar pelo trecho onde rodo dismiss;
Segue o trecho do código onde eu faço todo o tratamento do ProgressDialog:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | private class ProgressTask extends AsyncTask<Void, Void, Boolean> { public ProgressTask() { } @Override protected void onPreExecute() { dialogo.show(); Log.d( "ListarProdutos (294)" , "dialogo.show()" ); } @Override protected void onPostExecute( final Boolean success) { dialogo.dismiss(); dialogo.cancel(); if (success){Log.d( "ListarProdutos (302)" , "dialogo.dismiss()" );} } @Override protected Boolean doInBackground(Void... params) { BigInteger produto_id; Log.d( "ListarProdutos (308)" , "doInBackground" ); if (cod_barras != null ){ produto_id = new BigInteger(cod_barras); } else { produto_id = produto_menu.getId(); } try { if (WebService.Conectado(getBaseContext())){ WebService wb = new WebService(); if (wb.getProduto(getBaseContext(), produto_id)){ produto_vo = produto_dao.get(produto_id); if (produto_vo.getDescricao().equalsIgnoreCase( "Nenhum produto localizado." )){ produto_vo.setDescricao( null ); } else { if (wb.getPreco(getBaseContext(), produto_id, loja.toString())){ } } itEditar.putExtra( "loja" , loja); itEditar.putExtra( "cod_barras" , produto_id.toString()); dialogo.dismiss(); dialogo.cancel(); Log.d( "ListarProdutos (329)" , "dialogo.dismiss()" ); //startActivity(itEditar); } else { mToast.show(); } } else { mToast.show(); } return true ; } catch (Exception e){ e.printStackTrace(); return false ; } } } |
Notem que eu inclui algumas linhas de log indicando a linha do código onde está naquele momento e o que está fazendo.
Agora o resultado do log quando executa esse trecho onde da pra ver que passou pelos dois locais onde faço o dismiss:
05-03 22:56:44.778: D/ListarProdutos (294)(10304): dialogo.show()
05-03 22:56:44.778: D/ListarProdutos (222)(10304): loja: 1 cod_barras: 7791293990583
05-03 22:56:44.778: D/ListarProdutos (308)(10304): doInBackground
05-03 22:56:44.818: D/WebService (29)(10304): Status de conexão 3G: true
05-03 22:56:45.088: D/dalvikvm(10304): GC_EXTERNAL_ALLOC freed 1433K, 58% free 3688K/8775K, external 3797K/3815K, paused 142ms
05-03 22:56:45.669: D/WebService (362) while(10304): Force break when line length < 3: 0
05-03 22:56:45.979: D/WebService (309)(10304): Force break when line length < 3: 0
05-03 22:56:45.989: D/ListarProdutos (329)(10304): dialogo.dismiss()
05-03 22:56:45.989: D/ListarProdutos (302)(10304): dialogo.dismiss()
Agora o log quando eu escolho um item da lista:
05-03 22:56:11.656: D/ListarProdutos (294)(10304): dialogo.show()
05-03 22:56:11.666: D/ListarProdutos (308)(10304): doInBackground
05-03 22:56:11.836: D/WebService (29)(10304): Status de conexão 3G: true
05-03 22:56:12.657: D/WebService (362) while(10304): Force break when line length < 3: 0
05-03 22:56:12.957: D/WebService (309)(10304): Force break when line length < 3: 0
05-03 22:56:12.967: D/ListarProdutos (329)(10304): dialogo.dismiss()
05-03 22:56:12.987: D/ListarProdutos (302)(10304): dialogo.dismiss()
A unica diferença é esse dalvikvm que deve ser justamente por causa da chamada da camera.
Se alguém tiver alguma ideia agradeço.
Novo Hamburgo - RS - Brasil
------------------
http://maicon.strey.nom.br/blog/
http://maicon.strey.nom.br/blog/netiqueta/
Linux user: #525086
------------------
2012/5/3 Maicon Strey <mstrey@gmail.com>
pois eh.S[o tenho um Dialog na tela.Eu coloquei um Log.d logo abaixo do dismiss e escreveu no log entao passou por ali.Vou tentar isso de tirar o startactivity hoje a noite e depois digo o que aconteceu.
Maicon Strey
Novo Hamburgo - RS - Brasil
------------------
http://maicon.strey.nom.br/blog/
http://maicon.strey.nom.br/blog/netiqueta/
Linux user: #525086------------------
2012/5/3 Thiago Lopes Rosa <thiago.rosa@gmail.com>Você tem certeza que está passando pelo dismiss, mas você tem certeza que está fazendo dismiss do dialog certo?Experimentou não ir para a próxima tela (tira o startactivity) e ver se o dialog fecha?
Thiago2012/5/3 Maicon Strey <mstrey@gmail.com>
Pessoal,Funcionou legal com asyncTask mas agora estou com a seguinte situação:em uma das tela do sistema tenho uma lista de produtos e um botão para fazer a leitura de um código de barras para o usuário incluir um novo produto. Se ele seleciona um produto da lista é direcionado para a tela de cadastro do produto e se ele pressionar o botão voltar o sistema retorna normal pra tela de lista.porém se ele faz a leitura de um código de barras ai ocorre um comportamento estranho.A tela de lista de produtos chama o zxing pra fazer a leitura do código de barras. Eu pego o retorno através do onActivityResult e dai abro a progressDialog e consulto esse código na base online. após consultar direciono pra tela de cadastro já com os dados recuperados da web. Se o usuário pressionar voltar o sistema retorna pra tela de lista de produtos mas com a progressDialog aberta.Já debuguei e tenho certeza que passa pelo trecho onde o progress é fechado ( dismiss() ) antes de ir pra próxima tela e também tenho certeza de que não entrou novamente no onActivityResult quando o usuários pressiona o voltar.O estranho é que o erro só ocorre quando é feita leitura do código de barras mas o progressDialog também é utilizado quando um produto da lista é selecionado.Se alguém tiver alguma dica agradeço.
Maicon Strey
Novo Hamburgo - RS - Brasil
------------------
http://maicon.strey.nom.br/blog/
http://maicon.strey.nom.br/blog/netiqueta/
Linux user: #525086------------------
2012/5/1 Thiago Lopes Rosa <thiago.rosa@gmail.com>Concordo, o AsyncTask é perfeito nesse caso!Thiago--2012/5/1 lucasddaniel <lucasddaniel@gmail.com>
usa um AsyncTask.
> ------------------http://maicon.strey.nom.br/blog/http://maicon.strey.nom.br/blog/netiqueta/
On 30 abr, 23:08, Maicon Strey <mst...@gmail.com> wrote:
> Olá Pessoal,
> Estou tentando exibir um progressDialog enquanto minha aplicação faz uma
> consulta ao meu webservice. Sem isso parece que a aplicação está congelada.
> Tentei fazer de várias maneiras e na última meu código ficou conforme esse
> ai embaixo.
> Desta forma o comportamento que ocorre é:
> 1) Eu clico no botão de atualizar dados
> 2) app envia requisição ao site
> 3) site responde
> 4) app processa resposta
> 5) exibe progressdialog.
>
> Resumindo: quando ela é exibida não é mais necessária. Eu quero que ela
> seja exibida logo após eu clicar no botão de atualizar dados e que suma só
> depois de processar a resposta do site.
>
> Alguém tem alguma dica?
>
> **********
> ProgressDialog dialogo = new ProgressDialog(this);
> dialogo.setMessage("Sincronizando informações de produtos.");
> dialogo.setTitle("Sincronizando");
> dialogo.setCancelable(true);
> dialogo.setProgressStyle(ProgressDialog.STYLE_SPINNER);
> dialogo.show();
>
> closeContextMenu();
> new Thread(new Runnable() {
> public void run() {
> if (WebService.Conectado(getBaseContext())){
> WebService wb = new WebService();
> if (wb.getProdutos(getBaseContext(), loja_menu.getId())){
> Intent itProdutos = new Intent(getBaseContext(), ListarProdutos.class);
> itProdutos.putExtra("loja", loja_menu.getId());
> dialogo.dismiss();
> startActivity(itProdutos);} else {
>
> Toast.makeText(getBaseContext(), "Problemas na conexão.\n Tente
> novamente." , 5).show();}
> }
> }
> });
>
> **********
>
> Maicon Strey
> Novo Hamburgo - RS - Brasil
> Linux user: #525086
> ------------------
Thiago Rosa
--
Thiago Rosa
0 comentários:
Postar um comentário