Você está na página 1de 34

Aula

 03:  Banco  de  Dados,  


Menus  e  Publicação  
Desenvolvimento  Android  
Prof.  Diego  M.  Rosa  
Sumário  

1.  U8lizando  Long  para  Dinheiro  


2.  Banco  de  Dados:  SQLite  
3.  Menu  de  opções/barra  de  ações  
4.  Menu  de  contexto  
5.  Mul8AutoCompleteTextView  
6.  AsyncTask  
7.  Publicando  a  App  
Long  para  Dinheiro  

•  Double  não  é  confiável  para  armazenar  


dinheiro  
•  Arredondamentos  e  representação  não  são  
sa8sfatórios  para  aplicações  financeiras  
•  BigDecimal  também  possui  problemas  
•  Long  com  cuidados  extras  nos  
arredondamentos  pode  ser  a  melhor  
alterna8va  
Long  para  Dinheiro  

•  Criação  da  classe  Dinheiro  


•  Armazena  valores  em  formato  long  e  u8liza  
BigDecimal  para  cálculos  
•  Valores  são  armazenados  em  milionésimos  e  
mul8plicados/divididos  por  1  milhão  sempre  
que  necessário  
•  Converte  de/para  String  
Banco  de  Dados:  SQLite  

•  O  Android  vem  com  o  banco  de  dados  SQLite  


•  Banco  de  dados  simples  
•  API  específica  (diferente  da  JDBC)  
•  Usamos  para  armazenar  dados  persistentes  
das  apps    
Banco  de  Dados:  SQLite  

•  Botando  ordem  na  casa:  classes  divididas  em  


pacotes  
•  Apresentação:  ac8vi8es  e  outras  classes  de  
interface  com  usuário  
•  Modelo:  lógica  de  negócio  
•  Dados:  classes  de  acesso  ao  banco  de  dados  
Banco  de  Dados:  SQLite  
Apresentação  

Negócio  

Acesso  a  Dados  
Banco  de  Dados:  SQLite  

•  An8ga  classe  Model  renomeada  para  


GerenciadorDespesas  
•  Nova  classe  PilaApp:  u8lizada  para  obter  uma  
referência  está8ca  ao  contexto  
Banco  de  Dados:  SQLite  

•  Criada  classe  Db  


•  Subclasse  de  SQLiteOpenHelper  
•  Iden8fica  nome  e  versão  do  banco  
•  Métodos  para  criar  e  atualizar  o  banco  
•  Constantes  para  os  nomes  das  tabelas,  nomes  
das  colunas  e  SQLs  
•  Métodos  auxiliares  para  fechar  conexões  
Banco  de  Dados:  SQLite  

•  Criada  classe  DespesaDao  


•  Padrão  de  projeto  Data  Access  Object  
•  Implementa  operações  CRUD  para  o  acesso  ao  
banco  de  dados  
•  GerenciadorDespesas  passa  a  usar  o  DAO  para  
armazenar/ler/remover  despesas  do  banco  
Menu  de  opções/barra  de  ações  

•  Primeiros  Android  vinham  com  botão  fsico  


para  exibir  o  menu  
•  A  par8r  do  Android  3.0,  menu  passa  a  
aparecer  como  uma  barra  de  ações  
•  Vamos  adicionar  um  menu  na  
ListaDespesasAc8vity  com  o  item  Adiciona  
para  adicionar  uma  nova  despesa  
Menu  de  opções/barra  de  ações  

•  Criar  uma  pasta  res/menu  


•  Criar  um  arquivo  de  recurso  menu  
•  Na  ac8vity,  implementar  
onCreateOp8onsMenu  
•  Para  responder  aos  itens  de  menu,  
implementar  onOp8onsItemSelected  
•  startAc8vityForResult/onAc8vityResult  
Menu  de  contexto  

•  No  Android,  um  clique  longo  exibe  o  menu  de  


contexto  
•  Vamos  adicionar  um  menu  de  contexto  na  
ListaDespesasAc8vity  para  remover  uma  
despesa  
Menu  de  contexto  

•  Criar  um  arquivo  de  recurso  menu  


•  Implementar  onCreateContextMenu  
•  Para  responder  aos  itens  de  menu,  
implementar  onContextItemSelected  
•  menuInfo  ajuda  a  descobrir  a  posição  
•  No  onCreate(),  chamar  
registerForContextMenu  
MulEAutoCompleteTextView  

•  É  interessante  salvar  as  tags  que  foram  usadas  


para  lembrar  o  usuário  no  futuro  
•  Criada  tabela  tag  no  banco  e  TagDao  
•  Uma  lista  ordenada  de  tags  é  adicionada  ao  
GerenciadorDespesas  
•  GerenciadorDespesas  passa  a  salvar  as  tags  e  
buscá-­‐las  do  banco  
MulEAutoCompleteTextView  

•  Para  exibir  opções  na  caixa  de  texto  enquanto  


o  usuário  digita:  Mul8AutoCompleteTextView  
•  Alterado  o  arquivo  de  layout  (.xml)  
•  No  onCreate,  seta  adapter  contendo  a  lista  de  
tags  
•  Tokenizer  responsável  por  separar  as  strings    
AsyncTask  

•  Android  u8liza  uma  única  thread  para  tratar  


todos  os  eventos  da  interface  gráfica  
•  Não  é  recomendável  fazer  tarefas  demoradas  
nessa  thread:  banco,  rede,  arquivos,  etc.  
•  Para  isso  se  u8liza  a  classe  AsyncTask  para  
executar  tarefas  em  uma  thread  “de  fundo”  
AsyncTask  

•  AsyncTask<Params,  Progress,  Result>  


•  onPreExecute()  
•  Result  doInBackground(Params...)  
•  onProgressUpdate(Progress...)  
–  publishProgress(Progress...)  
•  onPostExecute(Result)  
AsyncTask  

•  Todas  as  chamadas  a  GerenciadorDespesas  


devem  ser  feitas  a  par8r  de  uma  AsyncTask  
•  DespesaAc8vity:  
–  buscaTags  
–  adicionaDespesa  
•  ListaDespesasAc8vity:  
–  buscaDespesas  
–  removeDespesa  
AsyncTask  

•  Ah...  também  criei  um  adapter  customizado  


para  as  tags:  TagAdapter!  
•  Como  ArrayAdapter.addAll()  só  aparece  no  
Android  3.0,  criei  o  meu  próprio  
Publicando  a  App  

•  Antes  de  publicar  a  app  é  comum  criar  uma  


ac8vity  falando  sobre  o  sorware  (“Sobre”  ou  
“About”)  
•  Criada  a  SobreAc8vity  
•  Layout  possui  uma  única  WebView  
•  HTML  acrescentado  em  assets  e  carregado  no  
onCreate  
•  Acrescentado  botão  na  ac8vity  principal  
Publicando  a  App  

•  Para  tornar  a  app  mais  profissional  também  é  


importante  criar  ícones  customizados  
•  Criados  ícones  de  lançamento  para  as  
densidades  mdpi  e  hdpi  
•  U8lizar  sorware  de  design  (ou  contratar  um  
designer!)  
•  Seguir  guia  do  Android  para  ícones  
Publicando  a  App  

Ícone  mdpi:  48x48   Ícone  hdpi:  72x72  


Publicando  a  App  

•  1o  passo  para  a  publicação  no  Google  Play:  


registro  como  desenvolvedor  Android  
–  hvps://play.google.com/apps/publish/  
•  Taxa  única  de  $25,00  dólares  
•  Pagamento  através  de  Google  Wallet  
Publicando  a  App  

•  Para  a  publicação  no  Google  Play,  são  


obrigatórias:  
–  Duas  imagens  das  telas  da  app  (screenshots)  
–  Uma  imagem  do  ícone  em  alta  resolução  
(512x512)  
Publicando  a  App  
Publicando  a  App  

•  Ainda  para  a  publicação,  são  opcionais:  


–  Banner  grande  para  a  página  da  app  no  Google  
Play  e  u8lizado  para  divulgação  (Feature  Graphic)  
–  Banner  pequeno  também  u8lizado  em  divulgação  
(Promo8onal  Graphic)  
Publicando  a  App  
Publicando  a  App  

•  Ainda  para  submissão:  


–  Um  xtulo  
–  Uma  descrição  da  app  
–  Mudanças  recentes  (opcional)  
–  Uma  frase  promocional  (opcional)  
–  Escolha  dos  países  
–  Um  vídeo  promocional  no  YouTube  (opcional)  
–  Categorização  e  informações  de  preço  
Publicando  a  App  

•  Gerar  um  APK  assinado:  


–  Intellij-­‐>Tools-­‐>Android-­‐>Export  Signed  
Applica8on  Package  
•  Se  quiser  criar  a  chave  na  linha  de  comando:  
–  keytool  -­‐genkey  -­‐v  -­‐alias  android  -­‐keyalg  RSA  -­‐
keysize  2048  -­‐validity  12000  -­‐keystore  
diegomrosa_android_release_key.keystore  
Publicando  a  App  

•  Tive  que  mudar  o  nome  do  pacote!  


•  com.pila  já  estava  em  uso  L  
•  Cada  app  deve  ter  um  nome  de  pacote  único,  
pois  será  o  iden8ficador  da  app  no  Android  
 
Publicando  a  App  

•  Publicar!  
•  Esperar  algumas  horas...  
Publicando  a  App  

•  Exercícios:  
1.  Acrescentar  campos  nas  despesas  
2.  Criar  tela  para  ver  detalhes  de  uma  despesa  
3.  Criar  tela  para  editar  uma  despesa  
4.  Criar  ac8vity  de  ajuda  (help)  semelhante  à  
SobreAc8vity  
5.  Fazer  gerenciamento  de  entradas  
6.  Gerenciar  carros/quilometragem/consumo  
7.  Etc,  etc,  etc...  

Você também pode gostar