Arquivos de maio, 2010

Como usar banco de dados em uma aplicação android

Um dos grandes diferenciais da plataforma android é a grande quantidade de módulos e APIsSQLite que as aplicações tem à  disposição para usar. Eles dão muito poder ao desenvolvedores, permitindo que estes façam coisas que eram impossíveis em outras plataformas móveis.

Um dos mais importantes módulos é o SQLite. Sim, amigos, já temos um SGDB (Sistema gerenciador de bancos de dados) instalado e pronto para usar! E é exatamente o que faremos no artigo de hoje.

No artigo anterior vimos como criar um Content Provider. Usaremos este provider para acessar o banco de dados.

Para fazer isso, precisamos implementar os métodos da classe ContentProvider que vimos no artigo passado (query(), delete(), update(), etc…)  para prover ao usuário os métodos para criar, atualizar, deletar e recuperar os dados. Além disso, usaremos a classe SQLiteOpenHelper para gerenciar a conexão com o banco de dados.

A classe SQLiteOpenHelper

A classe SQLiteOpenHelper, como dito anteriormente, será usada para gerenciar o banco de dados. …

Content Providers

Os Content Providers são parte importantíssima da arquitetura de um sistema android. É responsabilidade deles prover às aplicações o conteúdo que elas precisam para funcionar, ou seja, os dados.

ContentProviderMas por que são realmente necessários?

As aplicações poderiam muito bem acessar diretamente um banco de dados, por exemplo. Porém, é uma boa prática tornar o modo como os dados são gravados transparente à aplicação. Dessa forma, a aplicação pode manter o foco nas interações com o usuário.

Além disso, essa técnica permite a criação de Shared Content Providers, que são providers “públicos” que podem ser acessados por várias aplicações. Por exemplo, existe o content provider de SMS/MMS que permite a qualquer aplicação ler as mensagens recebidas por um telefone celular.

E como é feita a comunicação entre Content Providers e Aplicações?

Uri. Guarde bem este nome, pois você irá precisar muito dele durante a sua carreira como desenvolvedor android.

Toda a comunicação entre aplicações e providers é feita …

Google anuncia o Froyo (Android 2.2) e a GoogleTV!

Hoje dou uma pequena pausa na série Desenvolvendo para Android para falar sobre dois anúncios que o google fez ontem no “GoogleIO”.

Froyo (Android 2.2)

O primeiro anúncio foi o Froyo – a nova versão do sistema operacional do robozinho verde.

Essa nova versão traz várias melhorias, mas as que me chamaram mais atenção foram as melhorias de performance, entre elas:

  • JIT – ou Just In Time, uma tecnologia que mapeia as intruções de código Java para código de máquina, tornando a performance destes um pouco mais parecida com código nativo. (Quer saber mais de JIT? a Wikipedia é um bom começo)
  • Browser – A engine do bowser foi trocado para a “V8 Engine“, mais rápida e com um suporte melhor a Javascript.

Além das melhorias de performance, a nova release contém nova APIs e uma feature que particularmente acho fundamental: A possibilidade de instalação de aplicativos no SD card.

A descrição completa da release está aqui: …

Trabalhando com logs em android

Hoje irei falar sobre um mecanismo simples porém muito útil para uma aplicação android: os logs.

Os logs permitem ao desenvolvedor debugar erros durante o desenvolvimento e também investigar problemas com o software em produção, ou seja, com o usuário final.

Para este fim, android tem um classe específica: A classe Log (android.util.Log).

Para criar os log, temos à disposição as funções Log.v(), Log.d(), Log.i(), Log.w(), r Log.e().

Mas por que tantas funções?

Porque os log em java tem alguns tipos – ou níveis – são eles:

  • DEBUG – logs impressos pela função Log.d()
  • ERROR – logs impressos pela função Log.e()
  • INFO – logs impressos pela função Log.i()
  • VERBOSE – logs impressos pela função Log.v()
  • WARN – logs impressos pela função Log.w()

Todas estas funções recebem como parâmetros duas strings – a primeira, chamada de TAG, e a segunda que é a mensagem em si. A TAG é uma string que irá identificar a sua aplicação, tornando mais fácil …

Criando uma Activity secundária

No post passado vimos como lançar uma Activity a partir de outra, usando as funções startActivity() e startActivityForResult().

Hoje usaremos esta técnica para mostrar ao usuário uma tela de “Boas Vindas” na nossa aplicação de exemplo, o QuickNotes.

Para criar essa nova Activity, usaremos alguma funções do Motodev. Se você não está usando a IDE da Motorola,  não tem problema – é só criar os arquivos manualmente. Porém recomendo o uso da IDE, por facilitar bastante a nossa vida.

Vamos começar criando a Activity que dará “Boas Vindas” ao usuário.

Vá até o menu “MOTODEV” ”New” “New Android Activity”. Na tela de configuração, entre com o nome da Activity a ser criada:

Configurando a Activity a ser criada

Configurando a Activity a ser criada

Após clicar em “Finish”, já haverá a classe “WelcomeActivity” no diretório src do nosso projeto.

Com a Activity criada, o próximo passo é criar o arquivo XML que definirá o seu layout. Crie o arquivo ‘welcome.xml’ no diretorio res/layout com …

Activity – o que é isso?

Hoje iremos conhecer uma das mais importantes classes de uma aplicação Android: A classe Activity.

No post “Criando um projeto Android (Helloworld!)” comecei a falar sobre ela:

Uma Activity é basicamente uma classe gerenciadora de UI (Interface com o usuário). Todo aplicativo android começa por uma Activity.

Ou seja, quando uma aplicação android é executada, na verdade é a sua Activity principal que é lançada.

Ciclo de vida de uma Activity

Uma das coisas que é importante conhecer sobre a Activity é o seu ciclo de vida. E para explicá-lo, nada melhor do que o seguinte diagrama*:

Ciclo de vida de uma Activity

Ciclo de vida de uma Activity


Este diagrama é de fundamental importância para o correto entendimento do funcionamento de uma aplicação android. Ele introduz, implicitamente, os estados que uma Activity pode estar,  os quais explico no desenho abaixo:

Estados de uma Activity

Estados de uma Activity

Voltando ao diagrama do ciclo de vida, temos as seguintes funções:

  • onCreate() É a primeira função a ser executada