Banco de Dados no
Mobile: Realm e
Firebase
Ricardo da Silva Ogliari
GDG
Um Pouco Sobre Mim
● Bacharel em Ciência da Computação;
● Especialista em Web - Inovacão e Tecnologia;
● MBA: Desenvolvimento de Jogos e Apps Mobile;
● Co-autor do Livro: Android do Básico ao Avançado - Ciência Moderna;
● Mobile Magazine;
● Desenvolvedor Android Bikoo/BovControl;
● Professor Especialização Senac e UPF. Professor Graduação UPF;
● Mais de 310 publicações;
● Fundador Things Hacker Team;
● 10 Nomes Open-Hardware 2013 - Revista iMasters;
SQLite
Introdução
● Uso de Banco de Dados Relacional - SQLite;
● API padrão do Android - Presente desde o Android 1.0;
● Código pesado, principalmente para novatos na plataforma ou oriundos de
concorrentes, como iOS e wPhone;
● Só uma olhadinha rápida:
● https://developer.android.com/training/basics/data-storage/databases.html?hl=
pt-br
Realm
Realm
● Promete ser mais rápido que qualquer outra solução de ORM;
● Promete ser mais rápido que o SQLite puro;
● Mais simples e Mais rápido;
● Suporte para:
○ Java/Android
○ Objective-C;
○ Swift;
○ Xamarim;
○ React Native;
Instalação - Pré-Requisitos
● Não suporta Java a não ser no Android. Neste momento.
● Android Studio >= 1.5.1.
● Versão do JDK >= 7.
● Android Api Level 9 ou superior (Android 2.3 Gingerbread).
Configuração da Biblioteca
● Gradle a nível de projeto:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath
"io.realm:realm-gradle-plugin:<versao>"
}
}
Configuração da Biblioteca
● Gradle a nível de módulo:
apply plugin: 'realm-android'
Modelo De Dados
● Uma simples classe que herda de RealmObject;
● Anotação para detalhes importantes de um banco de dados relacional, como o
@PrimeryKey para chave primária;
● Documentação detalha outras anotações e tipos de dados:
https://realm.io/docs/java
Modelo De Dados
public class Task extends RealmObject{
@PrimaryKey
public String nome;
public String descricao;
public long termino;
public String local;
public boolean iniciada;
@Override
public String toString() {
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(termino);
int dia = cal.get(Calendar.DAY_OF_MONTH);
...
return "Nome: " + nome + "nDescrição: " + descricao + "nTérmino: " +
(dia < 10 ? "0" + dia : "" + dia) + "/" + …);
}
}
RealmConfiguration e Realm
● Necessária a criação de uma configuração para o Realm (Migração, Encriptação);
● Posteriormente cria-se a própria instância de Realm (Trabalha diretamente sobre
os dados);
● Indicado usar em uma classe que estende de Application;
public class CoreApplication extends Application{
public Realm realm;
@Override
public void onCreate() {
super.onCreate();
RealmConfiguration realmConfig = new RealmConfiguration.Builder(this).deleteRealmIfMigrationNeeded().build();
Realm.setDefaultConfiguration(realmConfig);
realm = Realm.getDefaultInstance();
}
}
Pesquisando Dados
● A classe Realm possui o método where que define o alvo das pesquisas;
● Depois, nos traz uma infinidade de métodos que espelham grande parte das
pesquisas com SQL;
● Métodos auxiliares do SQL como count e average também estão presentes;
● Perceba o uso do método Assíncrono. O changeListener recebe o resultado
da pesquisa.
@Override
protected void onCreate(Bundle savedInstanceState) {
...
RealmResults<Task> result = ((CoreApplication)getApplication()).realm.where(Task.class).findAllAsync();
result.addChangeListener(callback);
}
Pesquisando Dados
● O Listener possui um único método a ser sobrescrito;
● O RealResults<Task> se usado no mesmo contexto da instância de Realm, mantém o listener
ativo e registra qualquer mudança nos dados.
● O RealmResults também precisa ser único para manter o callback para futuras atualizações.
● Método sort para ordenação dos resultados;
public static RealmResults<Task> results;
private RealmChangeListener callback = new RealmChangeListener() {
public void onChange(Object element) {
results = (RealmResults<Task>) element;
results = results.sort("termino", Sort.ASCENDING);
listTasks.setAdapter(new ArrayAdapter<Task>(
MainActivity.this, android.R.layout.simple_list_item_1, results
)
);
}
};
Excluindo
● Usando a mesma instância de Realm da Application;
● Método executeTransaction é síncrono;
● Opção de trabalho assíncrono. Porém, neste caso obrigatoriamente, precisamos
usar a opção síncrona.
● Na própria instância RealmObject é possível chamar deleteFromRealm.
//só pode ser feito da mesma thread onde o objeto foi criado
((CoreApplication)getApplication()).realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
task.deleteFromRealm();
}
});
//results.deleteFirstFromRealm();
//results.deleteLastFromRealm();
Salvar Dados
● Executamos uma tarefa assíncrona;
● A assinatura do método recebe a implementação de um método de sucesso e de erro;
Task result = ((CoreApplication)getApplication()).realm.where(Task.class).equalTo("nome", key).findFirst();
saveTaskNome.setText(result.nome);
…
((CoreApplication)getApplication()).realm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm bgRealm) {
Task task = new Task();
task.nome = saveTaskNome.getText().toString();
...
bgRealm.copyToRealmOrUpdate(task);
}
}, new Realm.Transaction.OnSuccess() {
public void onSuccess() {}
}, new Realm.Transaction.OnError() {
public void onError(Throwable error) {}
});
Firebase
O que é?
● Um set de ferramentas que auxiliam e agilizam o processo de
desenvolvimento de aplicativos móveis;
Detalhes
● Android;
● Web;
● iOS;
● Alguns serviços gratuitos, alguns pagos e, também tem serviços com o modelo
de cotas;
● Pré-Requisitos para Android:
○ Android 2.3 ou superior;
○ Google Play Services 9.0.2 ou superior;
○ O Google Play Services SDK;
○ Android Studio 1.5 ou Superior;
○ Um projeto Android Studio e seu package name;
Configuração no Android - Passo 1
● Acessar o console do Firebase: https://console.firebase.google.com.
Configuração no Android - Passo 2
● Criar o novo Projeto.
Configuração no Android - Passo 2
● Dashboard do projeto:
Configuração no Android - Passo 3.1
● Adicionar o Firebase ao Projeto Android:
Configuração no Android - Passo 3.2
● Adicionar o Firebase ao Projeto Android:
Configuração no Android - Passo 3.3
Pronto!
● Se essa tela apareceu, está tudo certo e o projeto Firebase adicionado no
projeto Android!!!!
Base de Dados
● Base de dados NOSQL. Tudo é JSON.
Base de Dados
● Para inicializar a base de dados podemos gerar um JSON;
● Minha dica: Json Generator: http://www.json-generator.com/;
Base de Dados
● O Json Generator permite o download do arquivo .json;
● No console do Firebase apenas importe o arquivo:
Base de Dados
● Logo a estrutura dos objetos Json vai ficar visível;
● Todos os dados podem ser editados;
E o Android???
● Todo o segredo é usar as classes FirebaseDatabase e DatabaseReference para
criar uma conexão com um path do bando de dados NOSql.
compile 'com.google.firebase:firebase-database:9.0.2'
FirebaseDatabase refCurrent = FirebaseDatabase.getInstance();
DatabaseReference myRef = refCurrent.getReference("tarefas");
compile 'com.google.firebase:firebase-database:9.0.2'
Pesquisa de Dados e Realtime Database
● As pesquisas de dados são possíveis com métodos que simulam boa parte das
consultas sql: queries, order by, first, limit, dentre outros;
● Na query ou na referência, temos listeners que funcionam realtime;
Query query = myRef.orderByChild("termino");
query.addValueEventListener(new ValueEventListener() {
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snap : dataSnapshot.getChildren()){
if (Integer.parseInt(snap.getKey()) > key){
key = Integer.parseInt(snap.getKey());
}
Task task = snap.getValue(Task.class);
}
}
public void onCancelled(DatabaseError databaseError) { }
}
Novos Dados
● Cria-se um novo filho na referência pai;
● Configuramos um valor para este filho que, pode ser a instância de uma classe
que espelha os objetos do JSON no banco de dados;
Task task = new Task();
task.nome = "Outra tarefa";
task.iniciada = false;
task.local = "Home";
task.termino = 22334455;
task.descricao = "Somente outra tarefa";
myRef.child("" + ++key).setValue(task);
Alteração de Dados
● Basta setar o valor de uma referência. Como nosso listener atua 100% do tempo
a própria interface da aplicação será atualizada;
…
tasks.get(position).termino = System.currentTimeMillis();
DatabaseReference refItem = refCurrent.getReference("tarefas/" + (position + 1));
refItem.setValue(tasks.get(position));
...
});
Remover Dados
● Basta configurar o valor de um filho para null;
● Ou ainda, de uma forma mais elegante, chamar o método removeValue
diretamente em uma referência;
…
DatabaseReference refItem = refCurrent.getReference("tarefas/" + (position + 1));
refItem.removeValue();
...
});
Conclusão
● O que é mesmo SQLiteOpenHelper;
● Opções rápidas e mais próximas ao código Java;
● Baixo custo e/ou grátis;
Perguntas
● Obrigado GDG;
● Obrigado IFSUL;
● Obrigado professor Élder Bernardi;
● Obrigado a todos!!!

Mais conteúdo relacionado

PDF
Big Data como Serviço: da captura à visualização de dados com alto desempenho
PDF
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
PDF
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...
PDF
Mini-Curso de MongoDB
PPT
Modelando aplicação em documento - MongoDB
ODP
MongoDB - Tudo o que você precisa saber
PDF
Cloud search avancado
PDF
Minicurso Epoca mongoDB
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...
Mini-Curso de MongoDB
Modelando aplicação em documento - MongoDB
MongoDB - Tudo o que você precisa saber
Cloud search avancado
Minicurso Epoca mongoDB

Mais procurados (18)

PDF
Curso mongo db com php
PDF
Como conectar programas em linguagem java a bases de dados
PDF
Apache Wicket
PDF
Python e bancos NoSQL
PPTX
MongoDB - Iniciando e Conhecendo
PDF
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
PPTX
#5 CRUD no MongoDB
PPTX
Acesso a Banco de Dados em Java usando JDBC
PPTX
Treze ferramentas/frameworks para desenvolvimento android
PDF
Aula android 04
PPTX
Funcionalidades de Acesso a Dados no 'Mango'
PDF
Introdução ao MongoDB em 30 slides
PDF
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
PPTX
Desenvolvimento de aplicações PHP com MongoDB
PDF
Migrando para o PHP 5
PPTX
Como funciona um banco de dados? (Worldwide Online TechDay 2010)
PDF
Mongodb workshop cinlug
ZIP
Testes integrados automatizados
Curso mongo db com php
Como conectar programas em linguagem java a bases de dados
Apache Wicket
Python e bancos NoSQL
MongoDB - Iniciando e Conhecendo
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
#5 CRUD no MongoDB
Acesso a Banco de Dados em Java usando JDBC
Treze ferramentas/frameworks para desenvolvimento android
Aula android 04
Funcionalidades de Acesso a Dados no 'Mango'
Introdução ao MongoDB em 30 slides
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
Desenvolvimento de aplicações PHP com MongoDB
Migrando para o PHP 5
Como funciona um banco de dados? (Worldwide Online TechDay 2010)
Mongodb workshop cinlug
Testes integrados automatizados
Anúncio

Destaque (20)

PPTX
Intro Multimedia
PPTX
Introdução à Multimídia
PPTX
Multimédia powerpoint
PPT
Uma introdução ao multimédia: conceitos básicos
PPTX
Aplicações Android Real-Time com Firebase
PDF
Técnico de Multimédia - Panfleto
PPTX
Guiao patricia leite
PPTX
PPSX
Acesso ensino superior
PPTX
Conceitos de multimédia
PPT
Cálculo médias
PDF
Alguns conceitos web
PPTX
Acesso ensino superior
PDF
Media Lab 1 aula Teórica 01
PPTX
Desvendando a Plataforma de Serviços Windows Azure
PDF
A plataforma Azure da Microsoft
PPTX
Introdução à computação na nuvem e Windows Azure
PPTX
Multimidia (introdução)
PDF
AAB308 - Cloud Computing Windows Azure - wcamb.pdf
KEY
Sistemas para o Mundo Real - TDC 2012
Intro Multimedia
Introdução à Multimídia
Multimédia powerpoint
Uma introdução ao multimédia: conceitos básicos
Aplicações Android Real-Time com Firebase
Técnico de Multimédia - Panfleto
Guiao patricia leite
Acesso ensino superior
Conceitos de multimédia
Cálculo médias
Alguns conceitos web
Acesso ensino superior
Media Lab 1 aula Teórica 01
Desvendando a Plataforma de Serviços Windows Azure
A plataforma Azure da Microsoft
Introdução à computação na nuvem e Windows Azure
Multimidia (introdução)
AAB308 - Cloud Computing Windows Azure - wcamb.pdf
Sistemas para o Mundo Real - TDC 2012
Anúncio

Semelhante a TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no Android (20)

PPTX
Android Firebase
PPTX
Iniciando com realm
PDF
Persistência com Realm.io
PDF
Desenvolvimento de aplicativos móveis para Android utilizando Java - 3/3
PDF
Android + firebase
PPSX
Aula 12/06 (SQLite)
PDF
Xamarin & Realm
PPTX
Aula05 android persistencia
PDF
Curso Básico Android - Aula 04
PPTX
Aula sobre banco de dados com firebase db
PDF
Desenvolvimento de Apps e Games para Android - Parte 6
PPT
Android com Firebase
PPTX
Aula05 - Android - Persistência
PDF
Persistência de Dados no SQLite com Room
PDF
Guia Aberto Android ed.2
PDF
Aumentando a produtividade com Android Libs
ODP
Desenvolvimento de WebServices RESTful com NodeJS e MongoDB
ODP
Orm android
PDF
Desenvolvimento de Apps e Games para Android - Parte 5
PPT
Entendendo a Arquitetura de Armazenamento, parte 1
Android Firebase
Iniciando com realm
Persistência com Realm.io
Desenvolvimento de aplicativos móveis para Android utilizando Java - 3/3
Android + firebase
Aula 12/06 (SQLite)
Xamarin & Realm
Aula05 android persistencia
Curso Básico Android - Aula 04
Aula sobre banco de dados com firebase db
Desenvolvimento de Apps e Games para Android - Parte 6
Android com Firebase
Aula05 - Android - Persistência
Persistência de Dados no SQLite com Room
Guia Aberto Android ed.2
Aumentando a produtividade com Android Libs
Desenvolvimento de WebServices RESTful com NodeJS e MongoDB
Orm android
Desenvolvimento de Apps e Games para Android - Parte 5
Entendendo a Arquitetura de Armazenamento, parte 1

Mais de tdc-globalcode (20)

PDF
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
PDF
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
PDF
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
PDF
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
PDF
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
PDF
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
PDF
TDC2019 Intel Software Day - Inferencia de IA em edge devices
PDF
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
PPT
Trilha .Net - Programacao funcional usando f#
PDF
TDC2018SP | Trilha Go - Case Easylocus
PDF
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
PDF
TDC2018SP | Trilha Go - Clean architecture em Golang
PDF
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
PDF
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
PDF
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
PDF
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
PDF
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
PDF
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
PDF
TDC2018SP | Trilha .Net - .NET funcional com F#
PDF
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - Inferencia de IA em edge devices
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha .Net - Programacao funcional usando f#
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core

Último (20)

PDF
Sociologia Cultural, Aspecto teóricos e conceitos
PPTX
Solos usos e impactos...............pptx
PPTX
A enfermagem voltada aos adultos portadores de sindrome de down
PDF
historia-e-geografia-do-amapa.pdf slides
PDF
Mudanças Climáticas. Texto e atividade
PDF
Historia-da-Psicologia-Rumos-e-percursos.pdf
PDF
DECISÃO (2).pdf Derrota histórica do Sintero expõe racha interno e fragilidad...
PPTX
SEGURANÇA, MEIO AMBIENTE E SAÚDE Aula 1.pptx
PPTX
AULA 5 - HIGIENE HOSPITALAR .pptx
PPTX
AULA 01 - INTRODUÇÃO AO ATENDIMENTO HUMANIZADO.pptx
PPTX
Primeiros Socorros. Aula 1 VEROUVIRSENTIR.pptx
PPTX
São João Eudes, 1601 – 1680, padre e fondador, Francés.pptx
PDF
APOSTILA PARA FORMAÇÃO E RECICLAGEM DE VIGILANTES.pdf
PDF
Apresentação Conteúdo sepsebdbsbdbb.pptx
PPTX
DOUTRINA FORÇA TÁTICA PMRO 2022 - PPT (1).pptx
DOCX
Aula 3- Direitos Humanos e Prevenção à Violência .docx
PPTX
02-simulado-saeb-9o-ano-matematica1.pptx
PPTX
Apresentação Treinamento Percepção de Riscos-1.pptx
PDF
diário de palestra DDS Online - Apostila.pdf
PDF
Historia da Gastronomia Mundial por Daianna Marques dos Santos
Sociologia Cultural, Aspecto teóricos e conceitos
Solos usos e impactos...............pptx
A enfermagem voltada aos adultos portadores de sindrome de down
historia-e-geografia-do-amapa.pdf slides
Mudanças Climáticas. Texto e atividade
Historia-da-Psicologia-Rumos-e-percursos.pdf
DECISÃO (2).pdf Derrota histórica do Sintero expõe racha interno e fragilidad...
SEGURANÇA, MEIO AMBIENTE E SAÚDE Aula 1.pptx
AULA 5 - HIGIENE HOSPITALAR .pptx
AULA 01 - INTRODUÇÃO AO ATENDIMENTO HUMANIZADO.pptx
Primeiros Socorros. Aula 1 VEROUVIRSENTIR.pptx
São João Eudes, 1601 – 1680, padre e fondador, Francés.pptx
APOSTILA PARA FORMAÇÃO E RECICLAGEM DE VIGILANTES.pdf
Apresentação Conteúdo sepsebdbsbdbb.pptx
DOUTRINA FORÇA TÁTICA PMRO 2022 - PPT (1).pptx
Aula 3- Direitos Humanos e Prevenção à Violência .docx
02-simulado-saeb-9o-ano-matematica1.pptx
Apresentação Treinamento Percepção de Riscos-1.pptx
diário de palestra DDS Online - Apostila.pdf
Historia da Gastronomia Mundial por Daianna Marques dos Santos

TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no Android

  • 1. Banco de Dados no Mobile: Realm e Firebase Ricardo da Silva Ogliari GDG
  • 2. Um Pouco Sobre Mim ● Bacharel em Ciência da Computação; ● Especialista em Web - Inovacão e Tecnologia; ● MBA: Desenvolvimento de Jogos e Apps Mobile; ● Co-autor do Livro: Android do Básico ao Avançado - Ciência Moderna; ● Mobile Magazine; ● Desenvolvedor Android Bikoo/BovControl; ● Professor Especialização Senac e UPF. Professor Graduação UPF; ● Mais de 310 publicações; ● Fundador Things Hacker Team; ● 10 Nomes Open-Hardware 2013 - Revista iMasters;
  • 4. Introdução ● Uso de Banco de Dados Relacional - SQLite; ● API padrão do Android - Presente desde o Android 1.0; ● Código pesado, principalmente para novatos na plataforma ou oriundos de concorrentes, como iOS e wPhone; ● Só uma olhadinha rápida: ● https://developer.android.com/training/basics/data-storage/databases.html?hl= pt-br
  • 6. Realm ● Promete ser mais rápido que qualquer outra solução de ORM; ● Promete ser mais rápido que o SQLite puro; ● Mais simples e Mais rápido; ● Suporte para: ○ Java/Android ○ Objective-C; ○ Swift; ○ Xamarim; ○ React Native;
  • 7. Instalação - Pré-Requisitos ● Não suporta Java a não ser no Android. Neste momento. ● Android Studio >= 1.5.1. ● Versão do JDK >= 7. ● Android Api Level 9 ou superior (Android 2.3 Gingerbread).
  • 8. Configuração da Biblioteca ● Gradle a nível de projeto: buildscript { repositories { jcenter() } dependencies { classpath "io.realm:realm-gradle-plugin:<versao>" } }
  • 9. Configuração da Biblioteca ● Gradle a nível de módulo: apply plugin: 'realm-android'
  • 10. Modelo De Dados ● Uma simples classe que herda de RealmObject; ● Anotação para detalhes importantes de um banco de dados relacional, como o @PrimeryKey para chave primária; ● Documentação detalha outras anotações e tipos de dados: https://realm.io/docs/java
  • 11. Modelo De Dados public class Task extends RealmObject{ @PrimaryKey public String nome; public String descricao; public long termino; public String local; public boolean iniciada; @Override public String toString() { Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(termino); int dia = cal.get(Calendar.DAY_OF_MONTH); ... return "Nome: " + nome + "nDescrição: " + descricao + "nTérmino: " + (dia < 10 ? "0" + dia : "" + dia) + "/" + …); } }
  • 12. RealmConfiguration e Realm ● Necessária a criação de uma configuração para o Realm (Migração, Encriptação); ● Posteriormente cria-se a própria instância de Realm (Trabalha diretamente sobre os dados); ● Indicado usar em uma classe que estende de Application; public class CoreApplication extends Application{ public Realm realm; @Override public void onCreate() { super.onCreate(); RealmConfiguration realmConfig = new RealmConfiguration.Builder(this).deleteRealmIfMigrationNeeded().build(); Realm.setDefaultConfiguration(realmConfig); realm = Realm.getDefaultInstance(); } }
  • 13. Pesquisando Dados ● A classe Realm possui o método where que define o alvo das pesquisas; ● Depois, nos traz uma infinidade de métodos que espelham grande parte das pesquisas com SQL; ● Métodos auxiliares do SQL como count e average também estão presentes; ● Perceba o uso do método Assíncrono. O changeListener recebe o resultado da pesquisa. @Override protected void onCreate(Bundle savedInstanceState) { ... RealmResults<Task> result = ((CoreApplication)getApplication()).realm.where(Task.class).findAllAsync(); result.addChangeListener(callback); }
  • 14. Pesquisando Dados ● O Listener possui um único método a ser sobrescrito; ● O RealResults<Task> se usado no mesmo contexto da instância de Realm, mantém o listener ativo e registra qualquer mudança nos dados. ● O RealmResults também precisa ser único para manter o callback para futuras atualizações. ● Método sort para ordenação dos resultados; public static RealmResults<Task> results; private RealmChangeListener callback = new RealmChangeListener() { public void onChange(Object element) { results = (RealmResults<Task>) element; results = results.sort("termino", Sort.ASCENDING); listTasks.setAdapter(new ArrayAdapter<Task>( MainActivity.this, android.R.layout.simple_list_item_1, results ) ); } };
  • 15. Excluindo ● Usando a mesma instância de Realm da Application; ● Método executeTransaction é síncrono; ● Opção de trabalho assíncrono. Porém, neste caso obrigatoriamente, precisamos usar a opção síncrona. ● Na própria instância RealmObject é possível chamar deleteFromRealm. //só pode ser feito da mesma thread onde o objeto foi criado ((CoreApplication)getApplication()).realm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { task.deleteFromRealm(); } }); //results.deleteFirstFromRealm(); //results.deleteLastFromRealm();
  • 16. Salvar Dados ● Executamos uma tarefa assíncrona; ● A assinatura do método recebe a implementação de um método de sucesso e de erro; Task result = ((CoreApplication)getApplication()).realm.where(Task.class).equalTo("nome", key).findFirst(); saveTaskNome.setText(result.nome); … ((CoreApplication)getApplication()).realm.executeTransactionAsync(new Realm.Transaction() { @Override public void execute(Realm bgRealm) { Task task = new Task(); task.nome = saveTaskNome.getText().toString(); ... bgRealm.copyToRealmOrUpdate(task); } }, new Realm.Transaction.OnSuccess() { public void onSuccess() {} }, new Realm.Transaction.OnError() { public void onError(Throwable error) {} });
  • 18. O que é? ● Um set de ferramentas que auxiliam e agilizam o processo de desenvolvimento de aplicativos móveis;
  • 19. Detalhes ● Android; ● Web; ● iOS; ● Alguns serviços gratuitos, alguns pagos e, também tem serviços com o modelo de cotas; ● Pré-Requisitos para Android: ○ Android 2.3 ou superior; ○ Google Play Services 9.0.2 ou superior; ○ O Google Play Services SDK; ○ Android Studio 1.5 ou Superior; ○ Um projeto Android Studio e seu package name;
  • 20. Configuração no Android - Passo 1 ● Acessar o console do Firebase: https://console.firebase.google.com.
  • 21. Configuração no Android - Passo 2 ● Criar o novo Projeto.
  • 22. Configuração no Android - Passo 2 ● Dashboard do projeto:
  • 23. Configuração no Android - Passo 3.1 ● Adicionar o Firebase ao Projeto Android:
  • 24. Configuração no Android - Passo 3.2 ● Adicionar o Firebase ao Projeto Android:
  • 26. Pronto! ● Se essa tela apareceu, está tudo certo e o projeto Firebase adicionado no projeto Android!!!!
  • 27. Base de Dados ● Base de dados NOSQL. Tudo é JSON.
  • 28. Base de Dados ● Para inicializar a base de dados podemos gerar um JSON; ● Minha dica: Json Generator: http://www.json-generator.com/;
  • 29. Base de Dados ● O Json Generator permite o download do arquivo .json; ● No console do Firebase apenas importe o arquivo:
  • 30. Base de Dados ● Logo a estrutura dos objetos Json vai ficar visível; ● Todos os dados podem ser editados;
  • 31. E o Android??? ● Todo o segredo é usar as classes FirebaseDatabase e DatabaseReference para criar uma conexão com um path do bando de dados NOSql. compile 'com.google.firebase:firebase-database:9.0.2' FirebaseDatabase refCurrent = FirebaseDatabase.getInstance(); DatabaseReference myRef = refCurrent.getReference("tarefas"); compile 'com.google.firebase:firebase-database:9.0.2'
  • 32. Pesquisa de Dados e Realtime Database ● As pesquisas de dados são possíveis com métodos que simulam boa parte das consultas sql: queries, order by, first, limit, dentre outros; ● Na query ou na referência, temos listeners que funcionam realtime; Query query = myRef.orderByChild("termino"); query.addValueEventListener(new ValueEventListener() { public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot snap : dataSnapshot.getChildren()){ if (Integer.parseInt(snap.getKey()) > key){ key = Integer.parseInt(snap.getKey()); } Task task = snap.getValue(Task.class); } } public void onCancelled(DatabaseError databaseError) { } }
  • 33. Novos Dados ● Cria-se um novo filho na referência pai; ● Configuramos um valor para este filho que, pode ser a instância de uma classe que espelha os objetos do JSON no banco de dados; Task task = new Task(); task.nome = "Outra tarefa"; task.iniciada = false; task.local = "Home"; task.termino = 22334455; task.descricao = "Somente outra tarefa"; myRef.child("" + ++key).setValue(task);
  • 34. Alteração de Dados ● Basta setar o valor de uma referência. Como nosso listener atua 100% do tempo a própria interface da aplicação será atualizada; … tasks.get(position).termino = System.currentTimeMillis(); DatabaseReference refItem = refCurrent.getReference("tarefas/" + (position + 1)); refItem.setValue(tasks.get(position)); ... });
  • 35. Remover Dados ● Basta configurar o valor de um filho para null; ● Ou ainda, de uma forma mais elegante, chamar o método removeValue diretamente em uma referência; … DatabaseReference refItem = refCurrent.getReference("tarefas/" + (position + 1)); refItem.removeValue(); ... });
  • 36. Conclusão ● O que é mesmo SQLiteOpenHelper; ● Opções rápidas e mais próximas ao código Java; ● Baixo custo e/ou grátis;
  • 37. Perguntas ● Obrigado GDG; ● Obrigado IFSUL; ● Obrigado professor Élder Bernardi; ● Obrigado a todos!!!