minicurso sobre androidannotations, greendao, eventbus e crouton
Post on 22-Jun-2015
889 Views
Preview:
DESCRIPTION
TRANSCRIPT
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
Processing schema version 1...Written /home/longa/dev/workspace/todo/src-gen/br/com/ricardolonga/todo/ItemDao.javaWritten /home/longa/dev/workspace/todo/src-gen/br/com/ricardolonga/todo/Item.javaWritten /home/longa/dev/workspace/todo/src-gen/br/com/ricardolonga/todo/DaoMaster.javaWritten /home/longa/dev/workspace/todo/src-gen/br/com/ricardolonga/todo/DaoSession.javaProcessed 1 entities in 113ms
Resultado...
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.
BroadcastReceiver
Activity
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);
@ViewByIdListView bookmarkList;
ListView bookmarkList = (ListView) findViewById(R.id.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();
}
});
@Click({R.id.updateBookmarksButton1, R.id.updateBookmarksButton2})
void updateBookmarksClicked() {
...
}
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();
}
});
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
}
}XyzActivity.java
Inner class
@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
Obrigado!
@ricardolongahttp://about.me/ricardo.longaricardo.longa@gmail.com
top related