quarta-feira, 15 de agosto de 2012

Usando o Handler como Timer

Uns dos usos interessantes da classe Handler é para executar alguma tarefa depois de algum tempo.




No caso vai executar o método finish() depois de 30 segundos.
O uso mais comum dessa técnica é para fechar a activity de Splash e chamar a activity principal.




segunda-feira, 13 de agosto de 2012

Dica: Como analisar as mensagens de erros do LogCat

Vamos fazer um projetinho bem simples para conseguirmos os dados para análise.

main.xml


TesteLogcatActivity.class


Ao executarmos, teremos a seguinte tela:




E no LogCat (no Eclipse, perspectiva DDMS):





Procuramos pela frase: "Caused by:", no caso é um erro de ArithmeticException : divisão por zero.
E na linha seguinte temos a linha da activity que causou o erro: linha 17.

A linha 17 na Activity é: resultado = dividendo / divisor;
O divisor está zerado, então corrigimos a linha 15: divisor = 10;
Localizado e corrigido o erro temos a nova activity:

TesteLogcatActivity.class



Ao executar, teremos um novo erro.

O LogCat, agora está assim:







Novamente, procuramos pela frase: "Caused by:", no caso é um erro de NullPointerException.
Geralmente um objeto não inicializado.
E na linha seguinte temos a linha da activity que causou o erro: linha 18.

A linha 18 na Activity é: tv.setText("Resultado = " + resultado );
tv é o objeto que não foi devidamente endereçado. Fazemos isso com o findViewById.

Localizado e corrigido o erro temos a nova activity:


TesteLogcatActivity.class



A executarmos, finalmente teremos a tela:



É isso.
Espero que ajude.

Obs: Se não tiver o "Caused by:" procure a primeira linha no LocgCat que tenha referência ao seu package, e verifique a linha no modulo indicado.

sábado, 11 de agosto de 2012

Android, Dalvik, Threads, diferenças


Tenho feito alguns testes com processamento concorrente em Java.
Uns dos primeiros testes que se faz quando estudamos concorrência é o da visibilidade de uma variável modificada por duas threads.
Ou se usa sincronização ou uma variável volátil para que as threads tenham acesso ao valor mais atual da variável.
Curiosamente, nas versões Dalvik que tenho testado, o programa listado a seguir tem funcionado, quando uma versão equivalente (não Android) fica em loop no meu pc.

Testei nos seguintes aparelhos:
Celular: Sony XPERIA mini E10a Android 2.1
Tablet:  Sansung Galaxy GT-P6210 Android 3.2
Tablet:  Motorola XOOM MZ604 Android 4.0.4

Obs: A variável "stopRequested" que uso para controlar o loop deveria ser volatile ou ser acessado via synchronized.


TesteThread04Activity.java



main.xml




Se alguém obter um resultado diferente gostaria de tomar conhecimento. Por favor, poste qual é o aparelho e a versão do Android.
Obrigado.

PS: Apesar de funcionar na maioria das vezes, está comprometido: não tem garantia que vai funcionar sempre.




sábado, 4 de agosto de 2012

Web Service


O colega Alexandre Antunes, do Portal Android, escreveu uma série de excelentes artigos sobre Web Service. Os artigos foram publicados na área de "Artigos, Tutoriais e Dicas" do Portal Android.
Ele, gentilmente, permitiu que eu os publicasse aqui no blog.
Como os artigos são longos e tem vários comentários, dúvidas e esclarecimentos, vou colocar abaixo os links para os mesmos.

Web Service RESTful 1 [+Java+JSON+Code]
Web Service RESTful 2 [+Consumir+Android+Code]
Web Service RESTful 3 [+PgSQL+DAO+Business+Factory]

Antunes, eu e os leitores do blog estamos muito agradecidos pelo seu gesto e por compartilhar o seu conhecimento. Muito Obrigado! Tudo de bom!