Ver mensagens sem resposta | Ver tópicos ativos Hoje é 10 Dez 2019, 10:37



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

Data de registro: 17 Jul 2011, 11:55
Mensagens: 2657
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
Cuide 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
Perfil
Android application
Android application

Data de registro: 30 Mai 2012, 01: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, 12:50
Perfil
Google employee
Google employee

Data de registro: 17 Jul 2011, 11:55
Mensagens: 2657
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
Cuide 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
Perfil
Android application
Android application

Data de registro: 30 Mai 2012, 01: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, 13:40
Perfil
Google employee
Google employee

Data de registro: 17 Jul 2011, 11:55
Mensagens: 2657
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
Cuide 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
Perfil
Android application
Android application

Data de registro: 30 Mai 2012, 01: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, 11:08
Perfil
Google employee
Google employee

Data de registro: 17 Jul 2011, 11:55
Mensagens: 2657
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
Cuide 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
Perfil
Android application
Android application

Data de registro: 30 Mai 2012, 01: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, 15:58
Perfil
Google employee
Google employee

Data de registro: 17 Jul 2011, 11:55
Mensagens: 2657
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
Cuide 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
Perfil
Mostrar mensagens anteriores:  Organizar por  
Responder Tópico   [ 9 Mensagens ] 

Quem está online

Usuários vendo este fórum: adolfo, alansousa, alexmarcolongo, alsimoes, alylson, ANDRE FELIX DE ASSIS, andre.hebeler, andrigo, arkanjo, arnaldo.miranda, beeshop, Biel, bozzano, Bravox, bruno.abd, Brunohc, brunomalka, buccalon, C-3PO, cabelo, camilodev, capo, cassianotartari, celson, Christiane, Clauber, Clone Trooper, culumin, Cynthia, cyzko, danielbfranco, dannieltec, Darth Vader, dchechetto, Deiapinh, Delão, denisfln, edlinux, edson dias de gusmao, eliasmachado_rj, emersonalencar, Eneias, fabricioLeonard, Felipe Marcondes, felipedornelas, fernandodotnet, fernandofsf, ffardo, Flavio, Flávio Robertgo, geco, germanno, Guilherme Cobain, GuilhermeZampieri, gustavobarbosa, ICCrawler - ICjobs, Igor_M, jacard, JeffCF, jefficojava, jhonguitar, JMurray, johnnyjx, jorgeFernandes, jrsilva, juliana_costa, Juliobcosta, kennedyximenes, kleberperea, leeeeooooooo, Leonardo333, Lincoln, lisbao, lucasB, luiz.lago, madeinnordeste, maolveira, marcosandreao, masf_33, maurofjr, Maxtremus, mcroft, Microdesk, mmfsndroid, MSN NewsBlogs, nakahara, nino, nivea, nobrejack, nocivus, Padawan, Paulo Bizzo, pmzara, Ricardo Chikasawa, Rickxdx, rixargolo, robsonoracle, rodrigo aguiar, rsl_master, ruizsa, soulmachine, suissa, Teodoro, ThiMatsu, tiago, tiagoxv, tricx16, valaszek, VIEIRIX, wilsond, wylken, xa:=zin, YaCy, Yoda 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 - 2016 Portal Android - Comunidade de Desenvolvedores Android

Estamos no Linkedin    Siga-nos no twitter


Powered by phpBB - Hospedado por Bemobi