|
Página 1 de 1
|
[ 9 Mensagens ] |
|
[Mini Tuto]Thread, Handler, Runnable e ProgressDialog - Ex03
Autor |
Mensagem |
A H Gusukuma
Google employee
Data de registro: 17 Jul 2011, 11:55 Mensagens: 2657 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áriosCuide do ciclo de vida do seu tópico: no onCreate(): seja claro, se necessário poste o código e as mensagens de erro. no onClick(): responda às sugestões. no onStop(): evite "ninguém?", "alguém?", etc. Procure acrescentar alguma nova informação. no onDestroy(): resolvido o assunto, poste imediatamente a solução, e, coloque no título do primeiro post [Resolvido].
|
09 Fev 2012, 23:30 |
|
 |
funes
Android application
Data de registro: 30 Mai 2012, 01: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, 12:50 |
|
 |
A H Gusukuma
Google employee
Data de registro: 17 Jul 2011, 11:55 Mensagens: 2657 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áriosCuide do ciclo de vida do seu tópico: no onCreate(): seja claro, se necessário poste o código e as mensagens de erro. no onClick(): responda às sugestões. no onStop(): evite "ninguém?", "alguém?", etc. Procure acrescentar alguma nova informação. no onDestroy(): resolvido o assunto, poste imediatamente a solução, e, coloque no título do primeiro post [Resolvido].
|
11 Ago 2012, 13:33 |
|
 |
funes
Android application
Data de registro: 30 Mai 2012, 01: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, 13:40 |
|
 |
A H Gusukuma
Google employee
Data de registro: 17 Jul 2011, 11:55 Mensagens: 2657 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áriosCuide do ciclo de vida do seu tópico: no onCreate(): seja claro, se necessário poste o código e as mensagens de erro. no onClick(): responda às sugestões. no onStop(): evite "ninguém?", "alguém?", etc. Procure acrescentar alguma nova informação. no onDestroy(): resolvido o assunto, poste imediatamente a solução, e, coloque no título do primeiro post [Resolvido].
|
11 Ago 2012, 20:25 |
|
 |
funes
Android application
Data de registro: 30 Mai 2012, 01: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, 11:08 |
|
 |
A H Gusukuma
Google employee
Data de registro: 17 Jul 2011, 11:55 Mensagens: 2657 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áriosCuide do ciclo de vida do seu tópico: no onCreate(): seja claro, se necessário poste o código e as mensagens de erro. no onClick(): responda às sugestões. no onStop(): evite "ninguém?", "alguém?", etc. Procure acrescentar alguma nova informação. no onDestroy(): resolvido o assunto, poste imediatamente a solução, e, coloque no título do primeiro post [Resolvido].
|
13 Ago 2012, 15:51 |
|
 |
funes
Android application
Data de registro: 30 Mai 2012, 01: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, 15:58 |
|
 |
A H Gusukuma
Google employee
Data de registro: 17 Jul 2011, 11:55 Mensagens: 2657 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áriosCuide do ciclo de vida do seu tópico: no onCreate(): seja claro, se necessário poste o código e as mensagens de erro. no onClick(): responda às sugestões. no onStop(): evite "ninguém?", "alguém?", etc. Procure acrescentar alguma nova informação. no onDestroy(): resolvido o assunto, poste imediatamente a solução, e, coloque no título do primeiro post [Resolvido].
|
13 Ago 2012, 16:06 |
|
|
|
Página 1 de 1
|
[ 9 Mensagens ] |
|
Quem está online |
Usuários vendo este fórum: adilson, alex.abrantes, Alexandre Castro, alexsander.miranda, Alexsandro Tirloni, amos, Anakin Skywalker, Andre Brito, Antonio Carlos, Arthas, austonrd, Avelino Mateus Neto, Berbert, betofigu, Biel, bigr ecreio, billsombrio, bravus, BrunoO, btleandro, carlosavasconcelos, cesschneider, culumin, cyzko, dalmeidabr, danilosouza, danilosv, deborazb, developermaster, digiwise, Dookan, Douglas Siviotti, eliasmachado_rj, eloilton, Eneias, EvertonLB, fabric01, fabricioLeonard, Flavio Alves, fmakula, furlanrapha, gapler, genildof, Gnomo, heliopassos, HyagoRules, Ielo8, IgorBrum, ismavolk, itsN, jacksaum, jeanbr07, Jenius, jhonguitar, Jless@, juliano, julianofischer, Juniorvs, Ki-Adi-Mundi, kidush, klausenner, laucode, laurj, levita, LForce, lucianno, luiz.lago, Marcelo Lima, marceloaragao, marcos_trb, mateusff, mauriciobreide, Mayron Cimardi, mcroft, Meticore, Mig, MpassosT, n3t0, navegador, Nice, nilsgome, nivea, onedroid, paulo.esantos, peixe, Princesa Léia Organa, pyrobit, r.wil, rbenatti, reginaldo, regisjj, renan.fernandes, retardad0, ricardo, rixargolo, romualdo, shadow, sidnei.gs, srsilveira, Synoo [Bot], teamamus, Thiago, VIEIRIX, Wendel Carvalho, xa:=zin, Yuri, Zam Wesell e 4 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
|
|