SlideShare ist ein Scribd-Unternehmen logo
1 von 37
Downloaden Sie, um offline zu lesen
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!!!

Weitere ähnliche Inhalte

Was ist angesagt?

Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com php
Suissa
 

Was ist angesagt? (18)

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

Andere mochten auch

Intro Multimedia
Intro MultimediaIntro Multimedia
Intro Multimedia
dribas
 
Técnico de Multimédia - Panfleto
Técnico de Multimédia - PanfletoTécnico de Multimédia - Panfleto
Técnico de Multimédia - Panfleto
escolaprofissionalsm
 
Acesso ensino superior
Acesso ensino superiorAcesso ensino superior
Acesso ensino superior
mmcoelho
 
Conceitos de multimédia
Conceitos de multimédiaConceitos de multimédia
Conceitos de multimédia
12anogolega
 
Desvendando a Plataforma de Serviços Windows Azure
Desvendando a Plataforma de Serviços Windows AzureDesvendando a Plataforma de Serviços Windows Azure
Desvendando a Plataforma de Serviços Windows Azure
LucasRomao
 

Andere mochten auch (20)

Intro Multimedia
Intro MultimediaIntro Multimedia
Intro Multimedia
 
Introdução à Multimídia
Introdução à Multimídia Introdução à Multimídia
Introdução à Multimídia
 
Multimédia powerpoint
Multimédia powerpointMultimédia powerpoint
Multimédia powerpoint
 
Uma introdução ao multimédia: conceitos básicos
Uma introdução ao multimédia: conceitos básicosUma introdução ao multimédia: conceitos básicos
Uma introdução ao multimédia: conceitos básicos
 
Aplicações Android Real-Time com Firebase
Aplicações Android Real-Time com FirebaseAplicações Android Real-Time com Firebase
Aplicações Android Real-Time com Firebase
 
Técnico de Multimédia - Panfleto
Técnico de Multimédia - PanfletoTécnico de Multimédia - Panfleto
Técnico de Multimédia - Panfleto
 
Guiao patricia leite
Guiao patricia leiteGuiao patricia leite
Guiao patricia leite
 
149
149149
149
 
Acesso ensino superior
Acesso ensino superiorAcesso ensino superior
Acesso ensino superior
 
Conceitos de multimédia
Conceitos de multimédiaConceitos de multimédia
Conceitos de multimédia
 
Cálculo médias
Cálculo médiasCálculo médias
Cálculo médias
 
Alguns conceitos web
Alguns conceitos webAlguns conceitos web
Alguns conceitos web
 
Acesso ensino superior
Acesso ensino superiorAcesso ensino superior
Acesso ensino superior
 
Media Lab 1 aula Teórica 01
Media Lab 1 aula Teórica 01Media Lab 1 aula Teórica 01
Media Lab 1 aula Teórica 01
 
Desvendando a Plataforma de Serviços Windows Azure
Desvendando a Plataforma de Serviços Windows AzureDesvendando a Plataforma de Serviços Windows Azure
Desvendando a Plataforma de Serviços Windows Azure
 
A plataforma Azure da Microsoft
A plataforma Azure da MicrosoftA plataforma Azure da Microsoft
A plataforma Azure da Microsoft
 
Introdução à computação na nuvem e Windows Azure
Introdução à computação na nuvem e Windows AzureIntrodução à computação na nuvem e Windows Azure
Introdução à computação na nuvem e Windows Azure
 
Multimidia (introdução)
Multimidia (introdução)Multimidia (introdução)
Multimidia (introdução)
 
AAB308 - Cloud Computing Windows Azure - wcamb.pdf
AAB308 - Cloud Computing Windows Azure - wcamb.pdfAAB308 - Cloud Computing Windows Azure - wcamb.pdf
AAB308 - Cloud Computing Windows Azure - wcamb.pdf
 
Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012
 

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

Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5
Erisvaldo Junior
 

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

Android Firebase
Android FirebaseAndroid Firebase
Android Firebase
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?
 
Android + firebase
Android + firebaseAndroid + firebase
Android + firebase
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App Engine
 
Mobileconf dicas-android
Mobileconf dicas-androidMobileconf dicas-android
Mobileconf dicas-android
 
6 curso-titanium-dados
6 curso-titanium-dados6 curso-titanium-dados
6 curso-titanium-dados
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosaChrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
 
Java e Cloud Computing
Java e Cloud ComputingJava e Cloud Computing
Java e Cloud Computing
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
Implementação de
Implementação de Implementação de
Implementação de
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5
 
Utilizando GeoTools para Manipulação de Dados Geográficos
Utilizando GeoTools para Manipulação de Dados GeográficosUtilizando GeoTools para Manipulação de Dados Geográficos
Utilizando GeoTools para Manipulação de Dados Geográficos
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
Acessando banco de dados remoto com android
Acessando banco de dados remoto com android Acessando banco de dados remoto com android
Acessando banco de dados remoto com android
 
Tornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JSTornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JS
 
Java no Google App Engine - TDC2011
Java no Google App Engine - TDC2011Java no Google App Engine - TDC2011
Java no Google App Engine - TDC2011
 
Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0
 

Mehr von tdc-globalcode

Mehr von tdc-globalcode (20)

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

Kürzlich hochgeladen

8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito
tatianehilda
 
Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemática
sh5kpmr7w7
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
TailsonSantos1
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
AntonioVieira539017
 

Kürzlich hochgeladen (20)

TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdfTCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
 
O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito
 
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
 
LENDA DA MANDIOCA - leitura e interpretação
LENDA DA MANDIOCA - leitura e interpretaçãoLENDA DA MANDIOCA - leitura e interpretação
LENDA DA MANDIOCA - leitura e interpretação
 
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVAEDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
 
migração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosmigração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenos
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
 
Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemática
 
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
 
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAPROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptx
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
 
Texto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptTexto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.ppt
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
 

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!!!