terça-feira, 6 de junho de 2017

CRUD básico com Android e Firebase (parte 1)

Nesta série de postagens mostrarei, passo a passo, como utilizar o Firebase para armazenar os dados de uma aplicação Android simples, criando, lendo, atualizando e apagando dados.

Para informações introdutórias sobre o Firebase, recomendo este post. O foco desta postagem é a funcionalidade de banco de dados do Firebase.

Esta série é baseada fortemente neste ótimo post, que além de texto possui seis vídeo-aulas, mostrando passo-a-passo todo o desenvolvimento. Porém, se você for seguir o post original, cuidado! Existem algumas diferenças entre o código no vídeo e o código disponibilizado na postagem. Nada muito grande, apenas nomes de variáveis ou classes, porém é o tipo de “erro” que derruba alguém que esteja estudando o tema pela primeira vez.

Para acompanhar com eficácia esta série, são necessários os seguintes pré-requisitos (isto significa que não vou dar detalhes desses itens no texto):

  • Paradigma de orientação a objetos;
  • Linguagem Java;
  • Desenvolvimento Android básico:
    • o que é uma Activity, sua composição em interface (xml) e código, entendimento do ciclo de vida de uma activity, criação de objetos (listeners) para tratamento de eventos, como criar novas activities através de intents.
    • Para este requisito, recomendo este curso gratuito no site Coursera: Build Your First Android App (Project-Centered Course), que mostra todos esses recursos básico através de pequenos projetos, que vão exemplificando como criar código para responder aos mais diversos tipos de eventos.
  • Uso básico do Android Studio:
    • criar classes, activities, edição de layouts (e suas propriedades), execução do código em um emulador.

O Firebase é um banco de dados “noSQL”, ou seja, não tem a forma tradicional de organização de dados em tabelas, acessadas de forma relacional. Os dados no Firebase são armazenados como uma árvore JSON (veremos o básico mais a frente), o que muda completamente a forma de como estruturar e acessar os dados. Existe uma playlist de vídeos no youtube com o objetivo de mostrar essas diferenças entre a forma relacional (com sql) e a forma do Firebase. Indico o link aqui mas confesso que eu mesmo ainda não acompanhei esta série de vídeos (ainda).

Indico também uma série de postagens com este objetivo (são 5 posts, o primeiro está aqui). Da mesma forma que o anterior, ainda não os acompanhei ("vendendo o peixe da mesma forma que comprei" 😉  )

JSON


Como falamos anteriormente, os dados são armazenados no Firebase como uma árvore JSON. Mostrarei então um pequeno resumo do básico deste formato, criado a partir da leitura desta ótima referência:

Um guia para JSON que vai direto ao ponto
Autor: Lindsay Bassett


JSON significa “JavaScript Object Notation”. É um formato para armazenamento e intercâmbio de dados, baseado tem texto-puro. Mais ou menos o mesmo objetivo do formato XML.

Apesar do “JavaScript” no nome, é independente de linguagem de programação.

A idéia aqui é armazenar os dados que constituem o estado de um objeto, através de pares nome/valor.

Por exemplo, um objeto “Sapato”, com os atributos brand (marca), color (cor), size (tamanho), e hasLaces (tem cadarços), seria representado em JSON desta forma:

 {  
     “brand” : “Crocs” ,  
     “color” : “pink” ,  
     “size”  : 9 ,  
     “hasLaces” : false  
 }

Par:
    nome = “brand”
    valor = “Crocs”

Citando o livro indicado: “... o intercâmbio de dados diz respeito aos dados, portanto o JSON não inclui as funções (métodos) dos objetos literais do JavaScript”.

Tipos de dados:

  • Para o NOME: qualquer string válida
  • Para o VALOR:
    • string
    • número
    • booleano
    • null
    • array
    • outro objeto

Um objeto é definido por chaves.
Vários pares nome/valor são separados por vírgula.
Note que um valor pode ser um outro objeto (aninhamento de objetos).

Vamos analisar o seguinte objeto:

{  
  "person" : {  
              "name"   : "Lindsay",  
              "height" : 66,  
              "head"   : {  
                          "hair" : {  
                                    "color" : “light”,  
                                    "length" : "short",  
                                    "style" : "A-line"  
                                   },  
                          "eyes" : "green"  
                         }  
             }  
}  


O objeto principal (indicado por 1) tem apenas um par, cujo nome é “person”, e o valor é outro objeto (indicado por 2).

O objeto 2 é formado por 3 pares, cujos nomes são “name” (o valor é uma string), “height” (o valor é um número) e “head” (o valor é outro objeto, indicado por 3).

O objeto 3 é formado por 2 pares, cujos nomes são “hair” (o valor é outro objeto, indicado por 4), e “eyes” (o valor é uma string).

O objeto 4 é formado por 3 pares, cujos nomes são “color” (o valor é uma string), “length” (o valor é uma string) e “style” (o valor é uma string).

Notem, em especial, a vírgula após a definição do objeto 4, para separar do próximo par (“eyes”/”green”).

Algumas características dos tipos de dados:

  • String
    • pode ser composta por qualquer caracter unicode
    • sempre entre aspas duplas
    • caracteres especiais com “escape” (\)
      • Exemplo: inserir as próprias aspas-duplas:
        “premiacao” : “diga \”ganhei\” no caixa!”
  • Número
    • Exemplos:
      • 123
      • 12.67
      • 67.234567
      • -234.123243
      • 6.45342e+12
  • Booleano:
    • true
    • false
  • Null:
    • null
  • Array:
    • Conjunto de valores, dos tipos vistos acima (inclusive objetos), entre colchetes e separados por vírgulas
 {  
   “cores” : [ “branco”, “azul”, “amarelo”, “vermelho” ]  
 }  

Misturar e combinar tipos de dados é válido:

 {  
   “valores” : [ 1, “string”, null, true ]  
 }  

É preciso cuidado por que, como já falamos, JSON é independente de linguagem, então se o exemplo acima for virar um array em outra linguagem que não o JavaScript, teremos problemas, já que geralmente os elementos de um vetor devem ser do mesmo tipo.

Ainda sobre arrays, podemos ter:

  • array de objetos
  • array de arrays (multidimensional)




Seguir para a parte 2.




Nenhum comentário: