Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton

Preview:

DESCRIPTION

Minicurso sobre Android Annotations, GreenDAO, EventBus e Crouton ocorrido em 22 de outubro no TechNight 2014, na Universidade do Sul de Santa Catarina.

Citation preview

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

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

Obrigado!

@ricardolongahttp://about.me/ricardo.longaricardo.longa@gmail.com