Ver mensagens sem resposta | Ver tópicos ativos Hoje é 24 Mai 2013, 13:19



Responder Tópico  [ 9 Mensagens ] 
 [Mini Tuto]Thread, Handler, Runnable e ProgressDialog - Ex03 
Autor Mensagem
Dalvik Virtual Machine
Dalvik Virtual Machine

Data de registro: 17 Jul 2011, 10:55
Mensagens: 1997
Localização: São Paulo
Mensagem [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! /13

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
Perfil
Android application
Android application

Data de registro: 30 Mai 2012, 00:01
Mensagens: 78
Mensagem 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
Perfil
Dalvik Virtual Machine
Dalvik Virtual Machine

Data de registro: 17 Jul 2011, 10:55
Mensagens: 1997
Localização: São Paulo
Mensagem Re: [Mini Tuto]Thread, Handler, Runnable e ProgressDialog -
Olá
Não entendi, o exemplo é justamento com um cálculo.
Elementar, mas é.
Veja:
total++;
 

_________________
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
Perfil
Android application
Android application

Data de registro: 30 Mai 2012, 00:01
Mensagens: 78
Mensagem 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
Perfil
Dalvik Virtual Machine
Dalvik Virtual Machine

Data de registro: 17 Jul 2011, 10:55
Mensagens: 1997
Localização: São Paulo
Mensagem 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
Perfil
Android application
Android application

Data de registro: 30 Mai 2012, 00:01
Mensagens: 78
Mensagem 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
Perfil
Dalvik Virtual Machine
Dalvik Virtual Machine

Data de registro: 17 Jul 2011, 10:55
Mensagens: 1997
Localização: São Paulo
Mensagem 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
Perfil
Android application
Android application

Data de registro: 30 Mai 2012, 00:01
Mensagens: 78
Mensagem 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
Perfil
Dalvik Virtual Machine
Dalvik Virtual Machine

Data de registro: 17 Jul 2011, 10:55
Mensagens: 1997
Localização: São Paulo
Mensagem 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
Perfil
Mostrar mensagens anteriores:  Organizar por  
Responder Tópico   [ 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

Procurar por:

© 2007 - 2013 Portal Android - Comunidade de Desenvolvedores da Plataforma Android

Estamos no Linkedin    Siga-nos no twitter


Powered by phpBB - Hospedado por Bemobi