|
Página 1 de 1
|
[ 9 Mensagens ] |
|
[Mini Tuto]Thread, Handler, Runnable e ProgressDialog - Ex03
| Autor |
Mensagem |
|
A H Gusukuma
Dalvik Virtual Machine
Data de registro: 17 Jul 2011, 10:55 Mensagens: 1997 Localização: São Paulo
|
 [Mini Tuto]Thread, Handler, Runnable e ProgressDialog - Ex03
Neste outro teste vamos simular uma operação demorada e mostrar a evolução do processamento através de um ProgressDialog com uma barra indicadora de progresso. Alguns detalhes da implementação: No onClick() do botão eu chamo o método ativaThread() que faz duas coisas: primeiro prepara o ProgressDialog e segundo prepara a thread e a starta. Na thread fazemos uma contagem de 0 a 100 e a cada iteração enviamos uma atualização da barra de progresso, como estamos em uma thread que não a UI Thread usamos o handler-runnable para isso. Quando a contagem chega a 100, mudamos o status para concluído e setamos o status da thread para interrupted. (Só para não ficar parado no sleep). No final, antes de sair da thread o ProgressDialog é fechado e enviamos uma breve mensagem via toast. Seguem os códigos. package br. com. agorandroid. testethread02; import android. app. Activity; import android. os. Bundle; import android. app. ProgressDialog; import android. os. Handler; import android. view. View; import android. view. View. OnClickListener; import android. widget. Button; import android. widget. Toast; /** * @author A H Gusukuma * agorandroid.blogspot.com */public class TesteThread02Activity extends Activity { Button button; ProgressThread progressThread; ProgressDialog progressDialog; Handler mHandler = new Handler (); /** Called when the activity is first created. */ @Override public void onCreate (Bundle savedInstanceState ) { super. onCreate(savedInstanceState ); setContentView (R. layout. main); button = (Button) findViewById (R. id. progressDialog); button. setOnClickListener(new OnClickListener () { public void onClick (View v ) { ativaThread (); } }); } private void ativaThread () { progressDialog = new ProgressDialog (TesteThread02Activity. this); progressDialog. setProgressStyle(ProgressDialog. STYLE_HORIZONTAL); progressDialog. setMessage("Running..."); progressDialog. setCancelable(false); progressDialog. show(); progressThread = new ProgressThread (); progressThread. start(); } private class ProgressThread extends Thread { final static int STATE_DONE = 0; final static int STATE_RUNNING = 1; private volatile int mState; volatile int total; ProgressThread () { mState = STATE_RUNNING; total = 0; } public void run () { do { total++; mHandler. post(new Runnable() { @Override public void run () { progressDialog. setProgress(total );; } }); if (total>= 100) { mState = STATE_DONE; Thread. currentThread(). interrupt(); } try { Thread. sleep(100); } catch (InterruptedException e ) { } } while(isRunning ()); mHandler. post(new Runnable() { @Override public void run () { progressDialog. dismiss(); Toast. makeText(TesteThread02Activity. this, "Fim da Thread", Toast. LENGTH_SHORT). show(); } }); } public boolean isRunning () { return mState == STATE_RUNNING; } }} <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <Button android:text="Progress Dialog" android:id="@+id/progressDialog" android:layout_width="fill_parent" android:layout_height="wrap_content"> </Button> </LinearLayout>
Bons códigos!  PS: Alterei a variável total para volatile, pois ela é acessada por duas threads.
_________________Abraços ___________ Novo App: CalcMat - Calculadora de materiais para concreto Blog: Agorandroid - sobre programação Android Twitter: @Agorandroid ___________ Campanha: Facilite sua vida e a dos outros usuários Netiqueta:Procure responder as sugestões. Quando encontrar a solução, coloque [Resolvido] no primeiro post o mais rápido possível. Lembre-se de agradecer às pessoas que ajudaram e poste a solução do problema.
|
| 09 Fev 2012, 22:30 |
|
 |
|
funes
Android application
Data de registro: 30 Mai 2012, 00:01 Mensagens: 78
|
 Re: [Mini Tuto]Thread, Handler, Runnable e ProgressDialog -
Interessante seu post, mas poderia dar um exemplo um metodos por exemplo um calculo?
|
| 10 Ago 2012, 11:50 |
|
 |
|
A H Gusukuma
Dalvik Virtual Machine
Data de registro: 17 Jul 2011, 10:55 Mensagens: 1997 Localização: São Paulo
|
 Re: [Mini Tuto]Thread, Handler, Runnable e ProgressDialog -
Olá Não entendi, o exemplo é justamento com um cálculo. Elementar, mas é. Veja:
_________________Abraços ___________ Novo App: CalcMat - Calculadora de materiais para concreto Blog: Agorandroid - sobre programação Android Twitter: @Agorandroid ___________ Campanha: Facilite sua vida e a dos outros usuários Netiqueta:Procure responder as sugestões. Quando encontrar a solução, coloque [Resolvido] no primeiro post o mais rápido possível. Lembre-se de agradecer às pessoas que ajudaram e poste a solução do problema.
|
| 11 Ago 2012, 12:33 |
|
 |
|
funes
Android application
Data de registro: 30 Mai 2012, 00:01 Mensagens: 78
|
 Re: [Mini Tuto]Thread, Handler, Runnable e ProgressDialog -
Entao pois fiz um progressdialog para receber um login do webservice, so que quando vou fazer um teste pra ver se e valido ou nao ele fecha o progress e nao exibe a mensagem segue o codigo! //Recebe Dados WEBSERVICE para validar LOGIN btnEfetuarLogin. setOnClickListener(new View. OnClickListener() { public void onClick (View v ) { // TODO Auto-generated method stub efetualoginProgress = ProgressDialog. show(LoginActivity. this, "Aguarde", "Processando..."); efetualoginProgress. setIcon(R. drawable. ic_launcher); efetualoginProgress. setCancelable(false); new Thread() { public void run () { //criando instância de classe para executar um método qualquer try{ //esse é apenas um método de teste que pode ser demorado //Thread.sleep(1000); validaLogin (); } catch (Exception e ) { Log. e("tag", e. getMessage()); } //encerra progress dialog efetualoginProgress. dismiss(); } }. start(); } }); } public void validaLogin (){ if(editEmail. getText(). toString(). equals("") || editSenha. getText(). toString(). equals("")){ //encerra progress dialog //efetualoginProgress.dismiss(); mensagemToast ("Campos Email e Senha devem ser preenchidos!"); } else{ String email = editEmail. getText(). toString(); String senha = editSenha. getText(). toString(); LoginWebService service = new LoginWebService (); String result = service. efetuaLogin(email, senha ); //editResult.setText(result); String resultadoLogin = result. toString(); if(resultadoLogin. equals("1")){ finish (); startActivity (new Intent (LoginActivity. this, AreaUsuarioActivity. class)); } else{ //encerra progress dialog //efetualoginProgress.dismiss(); mensagemExibir ("Atenção", "Usuário ou Senha Inválido!"); } } }
|
| 11 Ago 2012, 12:40 |
|
 |
|
A H Gusukuma
Dalvik Virtual Machine
Data de registro: 17 Jul 2011, 10:55 Mensagens: 1997 Localização: São Paulo
|
 Re: [Mini Tuto]Thread, Handler, Runnable e ProgressDialog -
Faltam informações: não tem nenhuma mensagem no logcat? Inverte o finish com o startActivity
_________________Abraços ___________ Novo App: CalcMat - Calculadora de materiais para concreto Blog: Agorandroid - sobre programação Android Twitter: @Agorandroid ___________ Campanha: Facilite sua vida e a dos outros usuários Netiqueta:Procure responder as sugestões. Quando encontrar a solução, coloque [Resolvido] no primeiro post o mais rápido possível. Lembre-se de agradecer às pessoas que ajudaram e poste a solução do problema.
|
| 11 Ago 2012, 19:25 |
|
 |
|
funes
Android application
Data de registro: 30 Mai 2012, 00:01 Mensagens: 78
|
 Re: [Mini Tuto]Thread, Handler, Runnable e ProgressDialog -
No logCat esta assim, Can´t create handler inside thread that has not called Lopper.prepare()
|
| 13 Ago 2012, 10:08 |
|
 |
|
A H Gusukuma
Dalvik Virtual Machine
Data de registro: 17 Jul 2011, 10:55 Mensagens: 1997 Localização: São Paulo
|
 Re: [Mini Tuto]Thread, Handler, Runnable e ProgressDialog -
Posta o código que está dando o erro
_________________Abraços ___________ Novo App: CalcMat - Calculadora de materiais para concreto Blog: Agorandroid - sobre programação Android Twitter: @Agorandroid ___________ Campanha: Facilite sua vida e a dos outros usuários Netiqueta:Procure responder as sugestões. Quando encontrar a solução, coloque [Resolvido] no primeiro post o mais rápido possível. Lembre-se de agradecer às pessoas que ajudaram e poste a solução do problema.
|
| 13 Ago 2012, 14:51 |
|
 |
|
funes
Android application
Data de registro: 30 Mai 2012, 00:01 Mensagens: 78
|
 Re: [Mini Tuto]Thread, Handler, Runnable e ProgressDialog -
//Recebe Dados WEBSERVICE para validar LOGIN btnEfetuarLogin. setOnClickListener(new View. OnClickListener() { public void onClick (View v ) { // TODO Auto-generated method stub efetualoginProgress = ProgressDialog. show(LoginActivity. this, "Aguarde", "Processando..."); efetualoginProgress. setIcon(R. drawable. ic_launcher); efetualoginProgress. setCancelable(false); new Thread() { public void run () { //criando instância de classe para executar um método qualquer try{ //esse é apenas um método de teste que pode ser demorado //Thread.sleep(1000); validaLogin (); } catch (Exception e ) { Log. e("tag", e. getMessage()); } //encerra progress dialog efetualoginProgress. dismiss(); } }. start(); } }); } public void validaLogin (){ if(editEmail. getText(). toString(). equals("") || editSenha. getText(). toString(). equals("")){ //encerra progress dialog //efetualoginProgress.dismiss(); mensagemToast ("Campos Email e Senha devem ser preenchidos!"); } else{ String email = editEmail. getText(). toString(); String senha = editSenha. getText(). toString(); LoginWebService service = new LoginWebService (); String result = service. efetuaLogin(email, senha ); //editResult.setText(result); String resultadoLogin = result. toString(); if(resultadoLogin. equals("1")){ finish (); startActivity (new Intent (LoginActivity. this, AreaUsuarioActivity. class)); } else{ //encerra progress dialog //efetualoginProgress.dismiss(); mensagemExibir ("Atenção", "Usuário ou Senha Inválido!"); } } }
|
| 13 Ago 2012, 14:58 |
|
 |
|
A H Gusukuma
Dalvik Virtual Machine
Data de registro: 17 Jul 2011, 10:55 Mensagens: 1997 Localização: São Paulo
|
 Re: [Mini Tuto]Thread, Handler, Runnable e ProgressDialog -
Deve ter uma parte do codigo com new Handler()
_________________Abraços ___________ Novo App: CalcMat - Calculadora de materiais para concreto Blog: Agorandroid - sobre programação Android Twitter: @Agorandroid ___________ Campanha: Facilite sua vida e a dos outros usuários Netiqueta:Procure responder as sugestões. Quando encontrar a solução, coloque [Resolvido] no primeiro post o mais rápido possível. Lembre-se de agradecer às pessoas que ajudaram e poste a solução do problema.
|
| 13 Ago 2012, 15:06 |
|
|
|
Página 1 de 1
|
[ 9 Mensagens ] |
|
Quem está online |
Usuários vendo este fórum: alexandre, alexandrefett, alexandrepom, alexsander.miranda, Anderson.OL, Andre, ANDRE FELIX DE ASSIS, andre.hebeler, Andreid, Androidthebest, ARAKINIDIO, arilsonm, Ask Jeeves, AT-AT, Augusto, austonrd, avsouza, berchielli, Beru Lars, betofigu, bigr ecreio, bozzano, brunogh, BTalhadas, burujo, caio, caiodemarco, camilodev, carminati, Cassius, Catapan, cesao, cezaraf, CKorneLL, Clauber, claudio, claudioalfonso, Cr-Informática, Danilo Dias, David, deborazb, denisfln, Diego, DITÃO, dreyer, ederson_4, edlinux, Eduardo, Eduardo - Brasil, Emanuella, erikopa, espinhara.net, EvertonLB, eXagon, felipe.cintra, felipetesc, Flavio Alves, flaviocc, fraga, Francisco_Geraldo, geovanebg, grandebaro, Guilherme Cobain, helder, heliopassos, henrique.garcia, Heritrix, hugomarinho, infonlinebr, ixian, jacksaum, jandersonjc, joaquimfoto, Josinhaz, jpespindola, klyff, kristopher, kusanaguy, lanlan, lazarodm, Lincoln, Lindberg, Liviosousa, Marcelo Alves, MarceloLuz, MarceloMC, marcelosv, marcos_trb, marcosandreao, marlovich, Marlus Dias Silva, Matheus562, maurofjr, mayahaslinger, Michel, monteirojp, n3t0, nardosnt, neviim, Nidio Dolfini, nino, oliveiramc, onedroid, Paulo Bizzo, phfmendes, pomarolli, R2-D2, rcotonet, regis.ror, Ricardo Chikasawa, ricdigital, rixargolo, RodReis, rotmeil, Rufino, ruizsa, Samuka, SERGIO RODRIGUES, Shaman286, thiago@xbrain.com.br, thienne, tiagocordeiro, tiasousa, tonical, viniciusluiz, Wendel Carvalho, weverton, wingdoido, woyzeck, xa:=zin, xGambit, yeltsinlima e 2 visitantes |
|
Você não pode criar novos tópicos neste fórum Você não pode responder tópicos neste fórum Você não pode editar suas mensagens neste fórum Você não pode excluir suas mensagens neste fórum Você não pode enviar anexos neste fórum
|
|