O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton

3.384 visualizações

Publicada em

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

Publicada em: Software
  • Seja o primeiro a comentar

Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton

  1. 1. Na prática com Android Annotations, GreenDAO, EventBus e Crouton.
  2. 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. 3. 1. Saber clonar um repositório Git do GitHub (git clone); 2. Saber trocar de branch’s com Git (git checkout);
  4. 4. 1. Configurar o ambiente de desenvolvimento;
  5. 5. 1. Configurar o ambiente de desenvolvimento; 2. Iniciar um projeto do zero;
  6. 6. 1. Configurar o ambiente de desenvolvimento; 2. Iniciar um projeto do zero; 3. Comandos do Git;
  7. 7. 1. Configurar o ambiente de desenvolvimento; 2. Iniciar um projeto do zero; 3. Comandos do Git; 4. Customizar estilos;
  8. 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. 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. 10. DAO | EventBus
  11. 11. DAO | EventBus
  12. 12. https://github.com/ricardolonga/mercadinho https://github.com/ricardolonga/mercadinho-generator
  13. 13. GreenDAO ● Framework open-source;
  14. 14. GreenDAO ● Framework open-source; ● Facilita a comunicação com SQLite;
  15. 15. GreenDAO ● Framework open-source; ● Facilita a comunicação com SQLite; ● API simples;
  16. 16. GreenDAO ● Framework open-source; ● Facilita a comunicação com SQLite; ● API simples; ● Otimizado para Android;
  17. 17. GreenDAO ● Framework open-source; ● Facilita a comunicação com SQLite; ● API simples; ● Otimizado para Android; ● Consumo mínimo de memória;
  18. 18. 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);
  19. 19. 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;
  20. 20. 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.
  21. 21. 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
  22. 22. 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...
  23. 23. Crouton ● Framework open-source;
  24. 24. Crouton ● Framework open-source; ● Context sensitive;
  25. 25. Crouton ● Framework open-source; ● Context sensitive; ● Uma alternativa ao Toast (context insensitive);
  26. 26. Toast.makeText(Activity, CharSequence, Duration).show(); Crouton.makeText(Activity, CharSequence, Style).show();
  27. 27. EventBus ● Framework open-source;
  28. 28. EventBus ● Framework open-source; ● Publish/Subscribe model;
  29. 29. EventBus ● Framework open-source; ● Publish/Subscribe model; ● Simplifica a comunicação entre componentes (Activities, Fragments, BroadcastReceivers, Threads, Services);
  30. 30. EventBus ● Framework open-source; ● Publish/Subscribe model; ● Simplifica a comunicação entre componentes (Activities, Fragments, BroadcastReceivers, Threads, Services); ● “Menos código, maior qualidade”.
  31. 31. 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.
  32. 32. Activity BroadcastReceiver
  33. 33. AndroidAnnotations ● Framework open-source;
  34. 34. AndroidAnnotations ● Framework open-source; ● Simplifica a codificação (reduz boilerplate);
  35. 35. AndroidAnnotations ● Framework open-source; ● Simplifica a codificação (reduz boilerplate); ● Facilita a manutenção;
  36. 36. 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);
  37. 37. 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;
  38. 38. AndroidAnnotations ● Event binding, sem mais listeners anônimos;
  39. 39. AndroidAnnotations ● Event binding, sem mais listeners anônimos; ● Rest client através da criação de interfaces (o framework irá implementar as interfaces);
  40. 40. 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;
  41. 41. 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;
  42. 42. 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.
  43. 43. ListView bookmarkList = (ListView) findViewById(R.id.bookmarkList);
  44. 44. ListView bookmarkList = (ListView) findViewById(R.id.bookmarkList); @ViewById ListView bookmarkList;
  45. 45. 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(); } });
  46. 46. 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(); } });
  47. 47. void updateBookmarksClicked() { new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); }
  48. 48. void updateBookmarksClicked() { new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); } private static final String BOOKMARK_URL = "http://www.bookmarks.com/bookmarks/{userId}?search={search}";
  49. 49. 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> { }
  50. 50. 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 } }
  51. 51. 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 } }
  52. 52. 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
  53. 53. 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
  54. 54. @Rest("http://www.bookmarks.com") public interface BookmarkClient { } BookmarkClient.java
  55. 55. @Rest("http://www.bookmarks.com") public interface BookmarkClient { @Get("/bookmarks/{userId}?search={search}") Bookmarks getBookmarks(String search, String userId); } BookmarkClient.java
  56. 56. @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
  57. 57. @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
  58. 58. @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
  59. 59. Referências ● https://github.com/greenrobot/EventBus ● https://github.com/excilys/androidannotations ● http://greendao-orm.com/ ● https://github.com/keyboardsurfer/Crouton
  60. 60. @ricardolonga http://about.me/ricardo.longa ricardo.longa@gmail.com Obrigado!

×