SlideShare une entreprise Scribd logo
1  sur  69
Télécharger pour lire hors ligne
Na prática com Android Annotations, 
GreenDAO, EventBus e Crouton.
1. Conhecimento intermediário em Java; 
2. Conhecimento básico em Android (configurar o ambiente 
de desenvolvimento / Android SDK / Android AVD, 
construir e executar um app do tipo HelloWorld); 
3. Para notebooks pessoais, preparar o ambiente de 
desenvolvimento.
1. Saber clonar um repositório Git do GitHub (git clone); 
2. Saber trocar de branch’s com Git (git checkout);
1. Configurar o ambiente de desenvolvimento;
1. Configurar o ambiente de desenvolvimento; 
2. Iniciar um projeto do zero;
1. Configurar o ambiente de desenvolvimento; 
2. Iniciar um projeto do zero; 
3. Comandos do Git;
1. Configurar o ambiente de desenvolvimento; 
2. Iniciar um projeto do zero; 
3. Comandos do Git; 
4. Customizar estilos;
1. Configurar o ambiente de desenvolvimento; 
2. Iniciar um projeto do zero; 
3. Comandos do Git; 
4. Customizar estilos; 
5. Boas práticas de programação;
1. Configurar o ambiente de desenvolvimento; 
2. Iniciar um projeto do zero; 
3. Comandos do Git; 
4. Customizar estilos; 
5. Boas práticas de programação; 
6. Ferramentas de build (Gradle ou Maven).
DAO | EventBus
DAO | EventBus
https://github.com/ricardolonga/mercadinho 
https://github.com/ricardolonga/mercadinho-generator
GreenDAO 
● Framework open-source;
GreenDAO 
● Framework open-source; 
● Facilita a comunicação com SQLite;
GreenDAO 
● Framework open-source; 
● Facilita a comunicação com SQLite; 
● API simples;
GreenDAO 
● Framework open-source; 
● Facilita a comunicação com SQLite; 
● API simples; 
● Otimizado para Android;
GreenDAO 
● Framework open-source; 
● Facilita a comunicação com SQLite; 
● API simples; 
● Otimizado para Android; 
● Consumo mínimo de memória;
GreenDAO 
● Framework open-source; 
● Facilita a comunicação com SQLite; 
● API simples; 
● Otimizado para Android; 
● Consumo mínimo de memória; 
● Biblioteca pequena (menos de 100k);
GreenDAO 
● Framework open-source; 
● Facilita a comunicação com SQLite; 
● API simples; 
● Otimizado para Android; 
● Consumo mínimo de memória; 
● Biblioteca pequena (menos de 100k); 
● Disponibiliza um gerador de código;
GreenDAO 
● Framework open-source; 
● Facilita a comunicação com SQLite; 
● API simples; 
● Otimizado para Android; 
● Consumo mínimo de memória; 
● Biblioteca pequena (menos de 100k); 
● Disponibiliza um gerador de código; 
● Camera360 (+50.000.000), Pinterest (+10.000.000), 
ICQ (+10.000.000), etc.
public static void main(String[] args) throws Exception { 
Schema schema = new Schema(1, "br.com.ricardolonga.todo"); 
Entity item = schema.addEntity("Item"); 
item.addIdProperty(); 
item.addStringProperty("title").notNull(); 
new DaoGenerator().generateAll(schema, "../todo/src-gen"); 
} DaoGenerator.java 
Resultado... 
Processing schema version 1... 
Written /home/longa/dev/workspace/todo/src-gen/br/com/ricardolonga/todo/ItemDao.java 
Written /home/longa/dev/workspace/todo/src-gen/br/com/ricardolonga/todo/Item.java 
Written /home/longa/dev/workspace/todo/src-gen/br/com/ricardolonga/todo/DaoMaster.java 
Written /home/longa/dev/workspace/todo/src-gen/br/com/ricardolonga/todo/DaoSession.java 
Processed 1 entities in 113ms
DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "todo", null); 
SQLiteDatabase db = helper.getWritableDatabase(); 
DaoMaster daoMaster = new DaoMaster(db); 
DaoSession daoSession = daoMaster.newSession(); 
ItemDao itemDao = daoSession.getItemDao(); 
Obtendo o ItemDao... 
Item item = new Item(null, itemTitle); 
itemDao.insert(item); 
itemDao.deleteAll(); 
itemDao.deleteByKey(id); 
Exemplos...
Crouton 
● Framework open-source;
Crouton 
● Framework open-source; 
● Context sensitive;
Crouton 
● Framework open-source; 
● Context sensitive; 
● Uma alternativa ao Toast (context insensitive);
Toast.makeText(Activity, CharSequence, Duration).show(); 
Crouton.makeText(Activity, CharSequence, Style).show();
EventBus 
● Framework open-source;
EventBus 
● Framework open-source; 
● Publish/Subscribe model;
EventBus 
● Framework open-source; 
● Publish/Subscribe model; 
● Simplifica a comunicação entre 
componentes (Activities, Fragments, BroadcastReceivers, 
Threads, Services);
EventBus 
● Framework open-source; 
● Publish/Subscribe model; 
● Simplifica a comunicação entre 
componentes (Activities, Fragments, BroadcastReceivers, 
Threads, Services); 
● “Menos código, maior qualidade”.
EventBus 
● Framework open-source; 
● Publish/Subscribe model; 
● Simplifica a comunicação entre 
componentes (Activities, Fragments, BroadcastReceivers, 
Threads, Services); 
● “Menos código, maior qualidade”; 
● Camera360 (+50.000.000), Path (+10.000.000), 
Pinterest (+10.000.000), etc.
Activity 
BroadcastReceiver
AndroidAnnotations 
● Framework open-source;
AndroidAnnotations 
● Framework open-source; 
● Simplifica a codificação (reduz boilerplate);
AndroidAnnotations 
● Framework open-source; 
● Simplifica a codificação (reduz boilerplate); 
● Facilita a manutenção;
AndroidAnnotations 
● Framework open-source; 
● Simplifica a codificação (reduz boilerplate); 
● Facilita a manutenção; 
● Permite a injeção de dependências (views, 
resources, system services, etc);
AndroidAnnotations 
● Framework open-source; 
● Simplifica a codificação (reduz boilerplate); 
● Facilita a manutenção; 
● Permite a injeção de dependências (views, 
resources, system services, etc); 
● Facilita o trabalho com threads;
AndroidAnnotations 
● Event binding, sem mais listeners anônimos;
AndroidAnnotations 
● Event binding, sem mais listeners anônimos; 
● Rest client através da criação de interfaces 
(o framework irá implementar as interfaces);
AndroidAnnotations 
● Event binding, sem mais listeners anônimos; 
● Rest client através da criação de interfaces 
(o framework irá implementar as interfaces); 
● Não impacta na performance em runtime;
AndroidAnnotations 
● Event binding, sem mais listeners anônimos; 
● Rest client através da criação de interfaces 
(o framework irá implementar as interfaces); 
● Não impacta na performance em runtime; 
● Tudo isso com menos de 50kb;
AndroidAnnotations 
● Event binding, sem mais listeners anônimos; 
● Rest client através da criação de interfaces 
(o framework irá implementar as interfaces); 
● Não impacta na performance em runtime; 
● Tudo isso com menos de 50kb; 
● Call of Duty (+1.000.000), Magic Piano by Smule 
(+10.000.000), etc.
ListView bookmarkList = (ListView) findViewById(R.id.bookmarkList);
ListView bookmarkList = (ListView) findViewById(R.id.bookmarkList); 
@ViewById 
ListView bookmarkList;
Button buttonOne = (Button) findViewById(R.id.updateBookmarksButton1); 
buttonOne.setOnClickListener(new OnClickListener() { 
public void onClick(View v) { 
updateBookmarksClicked(); 
} 
}); 
Button buttonTwo = (Button) findViewById(R.id.updateBookmarksButton2); 
buttonTwo.setOnClickListener(new OnClickListener() { 
public void onClick(View v) { 
updateBookmarksClicked(); 
} 
});
Button buttonOne = (Button) findViewById(R.id.updateBookmarksButton1); 
buttonOne.setOnClickListener(new OnClickListener() { 
@Click({R.id.updateBookmarksButton1, R.id.updateBookmarksButton2}) 
void updateBookmarksClicked() { 
... 
} 
public void onClick(View v) { 
updateBookmarksClicked(); 
} 
}); 
Button buttonTwo = (Button) findViewById(R.id.updateBookmarksButton2); 
buttonTwo.setOnClickListener(new OnClickListener() { 
public void onClick(View v) { 
updateBookmarksClicked(); 
} 
});
void updateBookmarksClicked() { 
new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); 
}
void updateBookmarksClicked() { 
new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); 
} 
private static final String BOOKMARK_URL = "http://www.bookmarks.com/bookmarks/{userId}?search={search}";
void updateBookmarksClicked() { 
new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); 
} 
private static final String BOOKMARK_URL = "http://www.bookmarks.com/bookmarks/{userId}?search={search}"; 
class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { 
}
void updateBookmarksClicked() { 
new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); 
} 
private static final String BOOKMARK_URL = "http://www.bookmarks.com/bookmarks/{userId}?search={search}"; 
class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { 
protected Bookmarks doInBackground(String... params) { 
// Cria o RestTemplate 
// Cria o HttpEntity 
// Invoca o método exchange 
// Obtém e retorna o Bookmarks 
} 
}
void updateBookmarksClicked() { 
new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); 
} 
private static final String BOOKMARK_URL = "http://www.bookmarks.com/bookmarks/{userId}?search={search}"; 
class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { 
protected Bookmarks doInBackground(String... params) { 
// Cria o RestTemplate 
// Cria o HttpEntity 
// Invoca o método exchange 
// Obtém e retorna o Bookmarks 
} 
protected void onPostExecute(Bookmarks result) { 
// Atualiza a UI Thread 
} 
}
void updateBookmarksClicked() { 
new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); 
} 
private static final String BOOKMARK_URL = "http://www.bookmarks.com/bookmarks/{userId}?search={search}"; 
class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { 
protected Bookmarks doInBackground(String... params) { 
// Cria o RestTemplate 
// Cria o HttpEntity 
// Invoca o método exchange 
// Obtém e retorna o Bookmarks 
} 
protected void onPostExecute(Bookmarks result) { 
// Atualiza a UI Thread 
} 
} XyzActivity.java
void updateBookmarksClicked() { 
new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); 
} 
private static final String BOOKMARK_URL = "http://www.bookmarks.com/bookmarks/{userId}?search={search}"; 
class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { 
protected Bookmarks doInBackground(String... params) { 
// Cria o RestTemplate 
// Cria o HttpEntity 
// Invoca o método exchange 
// Obtém e retorna o Bookmarks 
} 
protected void onPostExecute(Bookmarks result) { 
// Atualiza a UI Thread 
} 
} 
Inner class 
XyzActivity.java
@Rest("http://www.bookmarks.com") 
public interface BookmarkClient { 
} 
BookmarkClient.java
@Rest("http://www.bookmarks.com") 
public interface BookmarkClient { 
@Get("/bookmarks/{userId}?search={search}") 
Bookmarks getBookmarks(String search, String userId); 
} BookmarkClient.java
@Rest("http://www.bookmarks.com") 
public interface BookmarkClient { 
@Get("/bookmarks/{userId}?search={search}") 
Bookmarks getBookmarks(String search, String userId); 
} BookmarkClient.java 
@RestService 
BookmarkClient restClient; 
XyzActivity.java
@Rest("http://www.bookmarks.com") 
public interface BookmarkClient { 
@Get("/bookmarks/{userId}?search={search}") 
Bookmarks getBookmarks(String search, String userId); 
} BookmarkClient.java 
@RestService 
BookmarkClient restClient; 
@Background 
void searchAsync(String searchString, String userId) { 
Bookmarks bookmarks = restClient.getBookmarks(searchString, userId); 
updateBookmarks(bookmarks); 
} 
XyzActivity.java
@RestService 
BookmarkClient restClient; 
@Background 
void searchAsync(String searchString, String userId) { 
Bookmarks bookmarks = restClient.getBookmarks(searchString, userId); 
updateBookmarks(bookmarks); 
} 
@UiThread 
void updateBookmarks(Bookmarks bookmarks) { 
// Atualiza a UI Thread 
} XyzActivity.java 
@Rest("http://www.bookmarks.com") 
public interface BookmarkClient { 
@Get("/bookmarks/{userId}?search={search}") 
Bookmarks getBookmarks(String search, String userId); 
} BookmarkClient.java
Referências 
● https://github.com/greenrobot/EventBus 
● https://github.com/excilys/androidannotations 
● http://greendao-orm.com/ 
● https://github.com/keyboardsurfer/Crouton
@ricardolonga 
http://about.me/ricardo.longa 
ricardo.longa@gmail.com 
Obrigado!

Contenu connexe

Tendances

Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDB
LelyBarros
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com php
Suissa
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
Stephen Chin
 
Grails parte 1 - introdução
Grails   parte 1 - introduçãoGrails   parte 1 - introdução
Grails parte 1 - introdução
Josino Rodrigues
 

Tendances (20)

Mobileconf dicas-android
Mobileconf dicas-androidMobileconf dicas-android
Mobileconf dicas-android
 
LaravelSP - MySQL 5.7: introdução ao JSON Data Type
LaravelSP - MySQL 5.7: introdução ao JSON Data TypeLaravelSP - MySQL 5.7: introdução ao JSON Data Type
LaravelSP - MySQL 5.7: introdução ao JSON Data Type
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDB
 
MondoDB
MondoDBMondoDB
MondoDB
 
MongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberMongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saber
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com php
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
MySQL 5.7 - 
Tirando o Máximo Proveito
MySQL 5.7 - 
Tirando o Máximo ProveitoMySQL 5.7 - 
Tirando o Máximo Proveito
MySQL 5.7 - 
Tirando o Máximo Proveito
 
Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1
 
MongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e ConhecendoMongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e Conhecendo
 
Grails parte 1 - introdução
Grails   parte 1 - introduçãoGrails   parte 1 - introdução
Grails parte 1 - introdução
 
Persistência com JPA e Hibernate
Persistência com JPA e HibernatePersistência com JPA e Hibernate
Persistência com JPA e Hibernate
 
MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento
 
How to use Elasticsearch Analyzers by EmergiNet
How to use  Elasticsearch Analyzers by EmergiNetHow to use  Elasticsearch Analyzers by EmergiNet
How to use Elasticsearch Analyzers by EmergiNet
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
jQuery na Prática!
jQuery na Prática!jQuery na Prática!
jQuery na Prática!
 
Fluxo dinâmicos usando spring aplication
Fluxo dinâmicos usando spring aplicationFluxo dinâmicos usando spring aplication
Fluxo dinâmicos usando spring aplication
 
Java script aula 06 - dom
Java script   aula 06 - domJava script   aula 06 - dom
Java script aula 06 - dom
 
Workshop Elasticsearch - Android Dev Conference 2016
Workshop Elasticsearch - Android Dev Conference 2016Workshop Elasticsearch - Android Dev Conference 2016
Workshop Elasticsearch - Android Dev Conference 2016
 

En vedette

Introduction Android - C.E.S.A.R
Introduction Android - C.E.S.A.RIntroduction Android - C.E.S.A.R
Introduction Android - C.E.S.A.R
Renato
 
android_overview
android_overviewandroid_overview
android_overview
Renato
 
Android Palestra
Android PalestraAndroid Palestra
Android Palestra
Renato
 
Pomodoro agil
Pomodoro agilPomodoro agil
Pomodoro agil
Renato
 
Atividades e Intenções (Android)
Atividades e Intenções (Android)Atividades e Intenções (Android)
Atividades e Intenções (Android)
Natanael Fonseca
 

En vedette (20)

A Journey Through MV Wonderland
A Journey Through MV WonderlandA Journey Through MV Wonderland
A Journey Through MV Wonderland
 
Introduction Android - C.E.S.A.R
Introduction Android - C.E.S.A.RIntroduction Android - C.E.S.A.R
Introduction Android - C.E.S.A.R
 
Aula 10 04 (Gerenciadores de layouts)
Aula 10 04 (Gerenciadores de layouts)Aula 10 04 (Gerenciadores de layouts)
Aula 10 04 (Gerenciadores de layouts)
 
Aula 22/05 (Handler)
Aula 22/05 (Handler)Aula 22/05 (Handler)
Aula 22/05 (Handler)
 
Aula 12/06 (SQLite)
Aula 12/06 (SQLite)Aula 12/06 (SQLite)
Aula 12/06 (SQLite)
 
Aula 10 04 (intents)
Aula 10 04 (intents)Aula 10 04 (intents)
Aula 10 04 (intents)
 
android_overview
android_overviewandroid_overview
android_overview
 
Android Palestra
Android PalestraAndroid Palestra
Android Palestra
 
Android na prática - USCS
Android na prática - USCSAndroid na prática - USCS
Android na prática - USCS
 
Aula 05/06 (Notification)
Aula 05/06 (Notification)Aula 05/06 (Notification)
Aula 05/06 (Notification)
 
Pomodoro agil
Pomodoro agilPomodoro agil
Pomodoro agil
 
Aula 5 - 24/04 (Landscape / Portrait)
Aula 5 - 24/04 (Landscape / Portrait)Aula 5 - 24/04 (Landscape / Portrait)
Aula 5 - 24/04 (Landscape / Portrait)
 
Aula 17 04 (Exercícios e ScrollView)
Aula 17 04 (Exercícios e ScrollView)Aula 17 04 (Exercícios e ScrollView)
Aula 17 04 (Exercícios e ScrollView)
 
Aula 6 - 08/05 (SharedPreferences)
Aula 6 - 08/05 (SharedPreferences)Aula 6 - 08/05 (SharedPreferences)
Aula 6 - 08/05 (SharedPreferences)
 
Aula04 android intents
Aula04 android intentsAula04 android intents
Aula04 android intents
 
Aula 6 - 08/05 (Menu)
Aula 6 - 08/05 (Menu)Aula 6 - 08/05 (Menu)
Aula 6 - 08/05 (Menu)
 
Oficina Sesc Android - V1
Oficina Sesc Android - V1Oficina Sesc Android - V1
Oficina Sesc Android - V1
 
K19 k41 Desenvolvimento Mobile com Android
K19 k41 Desenvolvimento Mobile com AndroidK19 k41 Desenvolvimento Mobile com Android
K19 k41 Desenvolvimento Mobile com Android
 
Atividades e Intenções (Android)
Atividades e Intenções (Android)Atividades e Intenções (Android)
Atividades e Intenções (Android)
 
Aula 29/05 (AlarmManager)
Aula 29/05 (AlarmManager)Aula 29/05 (AlarmManager)
Aula 29/05 (AlarmManager)
 

Similaire à Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton

WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
João Moura
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual Basic
Ricardo Guerra Freitas
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptx
Carlos Gonzaga
 
LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04
Carlos Santos
 

Similaire à Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton (20)

Aplicações com Tecnologias Web
Aplicações com Tecnologias WebAplicações com Tecnologias Web
Aplicações com Tecnologias Web
 
Grails
GrailsGrails
Grails
 
Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.
 
Introdução Play framework
Introdução Play frameworkIntrodução Play framework
Introdução Play framework
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Django
DjangoDjango
Django
 
Desenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo ToolkitDesenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo Toolkit
 
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual Basic
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013
 
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptx
 
Intervalo Técnico - QG Mobile
Intervalo Técnico - QG MobileIntervalo Técnico - QG Mobile
Intervalo Técnico - QG Mobile
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
Aplicações Realtime em Android | Fisl 15 | GuMobileRS
Aplicações Realtime em Android | Fisl 15 | GuMobileRSAplicações Realtime em Android | Fisl 15 | GuMobileRS
Aplicações Realtime em Android | Fisl 15 | GuMobileRS
 
Ruby On Rails Regis
Ruby On Rails RegisRuby On Rails Regis
Ruby On Rails Regis
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniter
 
LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04
 
Gwt parte 01
Gwt   parte 01Gwt   parte 01
Gwt parte 01
 
Ferramentas para Ambiente de Desenvolvimento Ágil
Ferramentas para Ambiente de Desenvolvimento ÁgilFerramentas para Ambiente de Desenvolvimento Ágil
Ferramentas para Ambiente de Desenvolvimento Ágil
 

Plus de Ricardo Longa

Android - Programação para dispositivos móveis (Aula 2)
Android - Programação para dispositivos móveis (Aula 2)Android - Programação para dispositivos móveis (Aula 2)
Android - Programação para dispositivos móveis (Aula 2)
Ricardo Longa
 
Android - Programação para dispositivos móveis (Aula 1)
Android - Programação para dispositivos móveis (Aula 1)Android - Programação para dispositivos móveis (Aula 1)
Android - Programação para dispositivos móveis (Aula 1)
Ricardo Longa
 

Plus de Ricardo Longa (8)

Adopt a JSR
Adopt a JSRAdopt a JSR
Adopt a JSR
 
JSR 339 - Java API for RESTful Web Services
JSR 339 - Java API for RESTful Web ServicesJSR 339 - Java API for RESTful Web Services
JSR 339 - Java API for RESTful Web Services
 
JBoss Forge 2
JBoss Forge 2JBoss Forge 2
JBoss Forge 2
 
Android - Programação para dispositivos móveis (Aula 2)
Android - Programação para dispositivos móveis (Aula 2)Android - Programação para dispositivos móveis (Aula 2)
Android - Programação para dispositivos móveis (Aula 2)
 
Android - Programação para dispositivos móveis (Aula 1)
Android - Programação para dispositivos móveis (Aula 1)Android - Programação para dispositivos móveis (Aula 1)
Android - Programação para dispositivos móveis (Aula 1)
 
Da introdução à prática no desenvolvimento Android
Da introdução à prática no desenvolvimento AndroidDa introdução à prática no desenvolvimento Android
Da introdução à prática no desenvolvimento Android
 
Open Networking
Open NetworkingOpen Networking
Open Networking
 
Da introdução à prática com Drools Expert e Drools Flow
Da introdução à prática com Drools Expert e Drools FlowDa introdução à prática com Drools Expert e Drools Flow
Da introdução à prática com Drools Expert e Drools Flow
 

Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton

  • 1. Na prática com Android Annotations, GreenDAO, EventBus e Crouton.
  • 2. 1. Conhecimento intermediário em Java; 2. Conhecimento básico em Android (configurar o ambiente de desenvolvimento / Android SDK / Android AVD, construir e executar um app do tipo HelloWorld); 3. Para notebooks pessoais, preparar o ambiente de desenvolvimento.
  • 3. 1. Saber clonar um repositório Git do GitHub (git clone); 2. Saber trocar de branch’s com Git (git checkout);
  • 4. 1. Configurar o ambiente de desenvolvimento;
  • 5. 1. Configurar o ambiente de desenvolvimento; 2. Iniciar um projeto do zero;
  • 6. 1. Configurar o ambiente de desenvolvimento; 2. Iniciar um projeto do zero; 3. Comandos do Git;
  • 7. 1. Configurar o ambiente de desenvolvimento; 2. Iniciar um projeto do zero; 3. Comandos do Git; 4. Customizar estilos;
  • 8. 1. Configurar o ambiente de desenvolvimento; 2. Iniciar um projeto do zero; 3. Comandos do Git; 4. Customizar estilos; 5. Boas práticas de programação;
  • 9. 1. Configurar o ambiente de desenvolvimento; 2. Iniciar um projeto do zero; 3. Comandos do Git; 4. Customizar estilos; 5. Boas práticas de programação; 6. Ferramentas de build (Gradle ou Maven).
  • 10.
  • 11.
  • 12.
  • 15.
  • 17. GreenDAO ● Framework open-source;
  • 18. GreenDAO ● Framework open-source; ● Facilita a comunicação com SQLite;
  • 19. GreenDAO ● Framework open-source; ● Facilita a comunicação com SQLite; ● API simples;
  • 20. GreenDAO ● Framework open-source; ● Facilita a comunicação com SQLite; ● API simples; ● Otimizado para Android;
  • 21. GreenDAO ● Framework open-source; ● Facilita a comunicação com SQLite; ● API simples; ● Otimizado para Android; ● Consumo mínimo de memória;
  • 22. GreenDAO ● Framework open-source; ● Facilita a comunicação com SQLite; ● API simples; ● Otimizado para Android; ● Consumo mínimo de memória; ● Biblioteca pequena (menos de 100k);
  • 23. GreenDAO ● Framework open-source; ● Facilita a comunicação com SQLite; ● API simples; ● Otimizado para Android; ● Consumo mínimo de memória; ● Biblioteca pequena (menos de 100k); ● Disponibiliza um gerador de código;
  • 24. GreenDAO ● Framework open-source; ● Facilita a comunicação com SQLite; ● API simples; ● Otimizado para Android; ● Consumo mínimo de memória; ● Biblioteca pequena (menos de 100k); ● Disponibiliza um gerador de código; ● Camera360 (+50.000.000), Pinterest (+10.000.000), ICQ (+10.000.000), etc.
  • 25. public static void main(String[] args) throws Exception { Schema schema = new Schema(1, "br.com.ricardolonga.todo"); Entity item = schema.addEntity("Item"); item.addIdProperty(); item.addStringProperty("title").notNull(); new DaoGenerator().generateAll(schema, "../todo/src-gen"); } DaoGenerator.java Resultado... Processing schema version 1... Written /home/longa/dev/workspace/todo/src-gen/br/com/ricardolonga/todo/ItemDao.java Written /home/longa/dev/workspace/todo/src-gen/br/com/ricardolonga/todo/Item.java Written /home/longa/dev/workspace/todo/src-gen/br/com/ricardolonga/todo/DaoMaster.java Written /home/longa/dev/workspace/todo/src-gen/br/com/ricardolonga/todo/DaoSession.java Processed 1 entities in 113ms
  • 26. DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "todo", null); SQLiteDatabase db = helper.getWritableDatabase(); DaoMaster daoMaster = new DaoMaster(db); DaoSession daoSession = daoMaster.newSession(); ItemDao itemDao = daoSession.getItemDao(); Obtendo o ItemDao... Item item = new Item(null, itemTitle); itemDao.insert(item); itemDao.deleteAll(); itemDao.deleteByKey(id); Exemplos...
  • 27.
  • 28. Crouton ● Framework open-source;
  • 29. Crouton ● Framework open-source; ● Context sensitive;
  • 30. Crouton ● Framework open-source; ● Context sensitive; ● Uma alternativa ao Toast (context insensitive);
  • 31. Toast.makeText(Activity, CharSequence, Duration).show(); Crouton.makeText(Activity, CharSequence, Style).show();
  • 32.
  • 33. EventBus ● Framework open-source;
  • 34. EventBus ● Framework open-source; ● Publish/Subscribe model;
  • 35. EventBus ● Framework open-source; ● Publish/Subscribe model; ● Simplifica a comunicação entre componentes (Activities, Fragments, BroadcastReceivers, Threads, Services);
  • 36. EventBus ● Framework open-source; ● Publish/Subscribe model; ● Simplifica a comunicação entre componentes (Activities, Fragments, BroadcastReceivers, Threads, Services); ● “Menos código, maior qualidade”.
  • 37. EventBus ● Framework open-source; ● Publish/Subscribe model; ● Simplifica a comunicação entre componentes (Activities, Fragments, BroadcastReceivers, Threads, Services); ● “Menos código, maior qualidade”; ● Camera360 (+50.000.000), Path (+10.000.000), Pinterest (+10.000.000), etc.
  • 39.
  • 41. AndroidAnnotations ● Framework open-source; ● Simplifica a codificação (reduz boilerplate);
  • 42. AndroidAnnotations ● Framework open-source; ● Simplifica a codificação (reduz boilerplate); ● Facilita a manutenção;
  • 43. AndroidAnnotations ● Framework open-source; ● Simplifica a codificação (reduz boilerplate); ● Facilita a manutenção; ● Permite a injeção de dependências (views, resources, system services, etc);
  • 44. AndroidAnnotations ● Framework open-source; ● Simplifica a codificação (reduz boilerplate); ● Facilita a manutenção; ● Permite a injeção de dependências (views, resources, system services, etc); ● Facilita o trabalho com threads;
  • 45. AndroidAnnotations ● Event binding, sem mais listeners anônimos;
  • 46. AndroidAnnotations ● Event binding, sem mais listeners anônimos; ● Rest client através da criação de interfaces (o framework irá implementar as interfaces);
  • 47. AndroidAnnotations ● Event binding, sem mais listeners anônimos; ● Rest client através da criação de interfaces (o framework irá implementar as interfaces); ● Não impacta na performance em runtime;
  • 48. AndroidAnnotations ● Event binding, sem mais listeners anônimos; ● Rest client através da criação de interfaces (o framework irá implementar as interfaces); ● Não impacta na performance em runtime; ● Tudo isso com menos de 50kb;
  • 49. AndroidAnnotations ● Event binding, sem mais listeners anônimos; ● Rest client através da criação de interfaces (o framework irá implementar as interfaces); ● Não impacta na performance em runtime; ● Tudo isso com menos de 50kb; ● Call of Duty (+1.000.000), Magic Piano by Smule (+10.000.000), etc.
  • 50. ListView bookmarkList = (ListView) findViewById(R.id.bookmarkList);
  • 51. ListView bookmarkList = (ListView) findViewById(R.id.bookmarkList); @ViewById ListView bookmarkList;
  • 52. Button buttonOne = (Button) findViewById(R.id.updateBookmarksButton1); buttonOne.setOnClickListener(new OnClickListener() { public void onClick(View v) { updateBookmarksClicked(); } }); Button buttonTwo = (Button) findViewById(R.id.updateBookmarksButton2); buttonTwo.setOnClickListener(new OnClickListener() { public void onClick(View v) { updateBookmarksClicked(); } });
  • 53. Button buttonOne = (Button) findViewById(R.id.updateBookmarksButton1); buttonOne.setOnClickListener(new OnClickListener() { @Click({R.id.updateBookmarksButton1, R.id.updateBookmarksButton2}) void updateBookmarksClicked() { ... } public void onClick(View v) { updateBookmarksClicked(); } }); Button buttonTwo = (Button) findViewById(R.id.updateBookmarksButton2); buttonTwo.setOnClickListener(new OnClickListener() { public void onClick(View v) { updateBookmarksClicked(); } });
  • 54. void updateBookmarksClicked() { new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); }
  • 55. void updateBookmarksClicked() { new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); } private static final String BOOKMARK_URL = "http://www.bookmarks.com/bookmarks/{userId}?search={search}";
  • 56. void updateBookmarksClicked() { new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); } private static final String BOOKMARK_URL = "http://www.bookmarks.com/bookmarks/{userId}?search={search}"; class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { }
  • 57. void updateBookmarksClicked() { new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); } private static final String BOOKMARK_URL = "http://www.bookmarks.com/bookmarks/{userId}?search={search}"; class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { protected Bookmarks doInBackground(String... params) { // Cria o RestTemplate // Cria o HttpEntity // Invoca o método exchange // Obtém e retorna o Bookmarks } }
  • 58. void updateBookmarksClicked() { new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); } private static final String BOOKMARK_URL = "http://www.bookmarks.com/bookmarks/{userId}?search={search}"; class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { protected Bookmarks doInBackground(String... params) { // Cria o RestTemplate // Cria o HttpEntity // Invoca o método exchange // Obtém e retorna o Bookmarks } protected void onPostExecute(Bookmarks result) { // Atualiza a UI Thread } }
  • 59. void updateBookmarksClicked() { new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); } private static final String BOOKMARK_URL = "http://www.bookmarks.com/bookmarks/{userId}?search={search}"; class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { protected Bookmarks doInBackground(String... params) { // Cria o RestTemplate // Cria o HttpEntity // Invoca o método exchange // Obtém e retorna o Bookmarks } protected void onPostExecute(Bookmarks result) { // Atualiza a UI Thread } } XyzActivity.java
  • 60. void updateBookmarksClicked() { new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); } private static final String BOOKMARK_URL = "http://www.bookmarks.com/bookmarks/{userId}?search={search}"; class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { protected Bookmarks doInBackground(String... params) { // Cria o RestTemplate // Cria o HttpEntity // Invoca o método exchange // Obtém e retorna o Bookmarks } protected void onPostExecute(Bookmarks result) { // Atualiza a UI Thread } } Inner class XyzActivity.java
  • 61. @Rest("http://www.bookmarks.com") public interface BookmarkClient { } BookmarkClient.java
  • 62. @Rest("http://www.bookmarks.com") public interface BookmarkClient { @Get("/bookmarks/{userId}?search={search}") Bookmarks getBookmarks(String search, String userId); } BookmarkClient.java
  • 63. @Rest("http://www.bookmarks.com") public interface BookmarkClient { @Get("/bookmarks/{userId}?search={search}") Bookmarks getBookmarks(String search, String userId); } BookmarkClient.java @RestService BookmarkClient restClient; XyzActivity.java
  • 64. @Rest("http://www.bookmarks.com") public interface BookmarkClient { @Get("/bookmarks/{userId}?search={search}") Bookmarks getBookmarks(String search, String userId); } BookmarkClient.java @RestService BookmarkClient restClient; @Background void searchAsync(String searchString, String userId) { Bookmarks bookmarks = restClient.getBookmarks(searchString, userId); updateBookmarks(bookmarks); } XyzActivity.java
  • 65. @RestService BookmarkClient restClient; @Background void searchAsync(String searchString, String userId) { Bookmarks bookmarks = restClient.getBookmarks(searchString, userId); updateBookmarks(bookmarks); } @UiThread void updateBookmarks(Bookmarks bookmarks) { // Atualiza a UI Thread } XyzActivity.java @Rest("http://www.bookmarks.com") public interface BookmarkClient { @Get("/bookmarks/{userId}?search={search}") Bookmarks getBookmarks(String search, String userId); } BookmarkClient.java
  • 66.
  • 67.
  • 68. Referências ● https://github.com/greenrobot/EventBus ● https://github.com/excilys/androidannotations ● http://greendao-orm.com/ ● https://github.com/keyboardsurfer/Crouton