que temos uma MainActivity? •Regra de negócio e framework junto e misturado •Se e somente se aparecer um erro como NetworkOnMainThreadException nós movemos a sujeira para algo como AsyncTask •Nenhuma separação de responsabilidade •Testes? La garantia soy yo!
bibliotecas que o auxilia no desenvolvimento de aplicativos robustos, testáveis e de fácil manutenção.” •Gerenciamento do ciclo de vida das Activities e Fragments. •Persistência de dados que sobrevivam a mudanças de configurações. •Redução na quantidade de código escrito para persistir dados no SQLite.
mudança nos seus valores seja observada. •Room: biblioteca de mapeamento de objetos SQLite. Similar ao greenDAO e ORMLite •ViewModel: Armazena e gerencia dados relacionados a View, sobrevive a mudanças de configurações. •Lifecycle: Possui informações sobre o estado do ciclo de vida de componentes como Activities e Fragments. AAC - Componentes
dados que possam ser persistidos no SQLite e que não podem ser resolvidos informando o TypeAffinity. AAC - Room public class DateConverter { @TypeConverter public static Date toDate(Long timestamp){ return timestamp == null ? null : new Date(timestamp); } @TypeConverter public static Long toTimestamp(Date date){ return date == null ? null : date.getTime(); } }
pela definição dos métodos que acessam o banco de dados. A classe anotada com @Database deve ter um método abstrato com 0 argumentos e que retorne a classe que é anotado com @Dao para que em tempo de compilação o Room possa gerar a implementação. AAC - Room @Dao @TypeConverters(DateConverter.class) public interface TarefaDao { @Query("select * from tarefas") LiveData<List<Tarefa>> recuperarTodasAsTarefas(); @Query("select * from tarefas where id = :id") LiveData<Tarefa> recuperarTarefa(int id); @Insert(onConflict = REPLACE) void inserirTarefa(Tarefa tarefa); @Update void atualizarTarefa(Tarefa tarefa); }
forma que possam sobreviver a mudanças de configurações. Não tem nenhum código relacionado a View e deve sempre ser independente da View. Se precisarmos do Context dentro do ViewModel, devemos estender a classe AndroidViewModel. AAC - ViewModel
mudança nesses valores, seus observadores sejam notificados. Diferente dos Observables, o LiveData respeita o ciclo de vida dos seus componentes observadores. AAC - LiveData // Activity viewModel.getApplicationDatabase().tarefaDao().recuperarTodasAsTarefas ().observe(this, new Observer<List<Tarefa>>() { @Override public void onChanged(@Nullable List<Tarefa> tarefas) { Toast.makeText(AdicionarTarefaActivity.this, "Tabela de Tarefas alterada", Toast.LENGTH_SHORT).show(); } }); // Dao @Query("select * from tarefas") LiveData<List<Tarefa>> recuperarTodasAsTarefas();