Sempre que o Android Studio perguntar o que deve fazer quando a cópia estiver sendo efetuada, informe para substituir tudo.
Faça a copia de todos os arquivos da Aula 10 para as respectivas pastas do projeto da Aula 11. Para alguns arquivos, será necessário editar o caminho dos imports das classes. Na imagem acima, em destaque você pode verificar que isso foi feito. Faça isto manualmente.
Após concluido, rode o projeto para garantir que não ficou nada faltando. No caso de algum problema, tente resolver. E se não conseguir, deixe um compentário com detalhes.
Refatorando a DAO - Método listarDados()
Garanta que seu projeto está rodando. Agora vamos implementar mais um método do
CRUD em nossa classe
LoginDAO.
Na aula 10 implementamos a classe
LoginDAO.java e adicionamos o método booleano
adicionar(Login obj).
Nossa classe está assim até o momento.
Para recuperar os dados do banco de dados, utilizando uma instrução SQL tal como
"select * from nome_da_tabela", temos que implementar um método que devolva uma coleção de objetos.
Adicione o método
listarTodos() conforme demonstrado abaixo na classe
LoginDAO.java. Por enquanto não iremos adicionar uma regra de negócio ao método listarTodos().
Em nossa classe DataSource, nós já deixamos implementado dois métodos genéricos. Sendo um para adicionar ou atualizar os dados, e outro para buscar os dados, estes métodos são o
persist() e o
find(), respectivamente.
Como você pode observar, o método find() devolve os dados na forma de um Cursor. Este método foi projetado de forma a ser o mais flexível possível. Quase tudo é passado na assinatura do método, o que nós dará inumeras possibilidades de consultas ao banco de dados. Vai depender basicamente dos dados fornecidos na chamada do método.
Vamos retornar ao método listarTodos(), mas agora efetivamente buscando os dados no banco de dados.
Implemente as regras de negócio conforme figura abaixo:
Método listarTodos() comentado
A consulta ao banco de dados para buscar todos os registros gravados na tabela
Login é realizada nas linhas 59 e 60. Estamos consumindo o método find da classe
DataSource, este método devolve um cursor populado com os dados. Note que foi passado apenas o nome da tabela, que em nossa arquitetura está definido na classe
DataModel.getTABELA_LOGIN().
Na linha 64, estamos testando se a consulta resultou em um cursor com dados, e caso exista mais que zero registros, iniciamos a adição destes dados na lista. O método
cursor.getCount() informa quantos registros existem no cursor.
Na linha 66, estamos garantindo que o ponteiro do curso está na primeira posição.
O objeto login é populado com os dados do cursor. Note que estamos transformando um objeto cursos em um objeto login, conforme código entre as linhas 72 e 74.
Após adicionar o objeto populado à lista, movemos o cursor para o próximo registro com o método
cursor.moveToNext(), linha 78.
Por fim, devolvemos a lista populada com todos os registros vindos da consulta do banco de dados.
Você pode verificar se tudo está funcionando corretamente, adicionando um Log.
Como desafio para o seu aprendizado, tente fazer isso e deixe um comentário se conseguiu ou não.
Criando um Layout para apresentar a Lista
Para que a lista seja apresentada, teremos que criar dois arquivos de layout. As imagens abaixo apresentam os resultados esperados.
Para criar este layout, crie uma nova Activity chamada ListaActivity, escola o layout blank para a activity. Depois faças as alterações manualmente no arquivo XML conforme mostrado abaixo:
Nesta aula estamos introduzindo mais um Widget ao nosso curso. Note que nas linhas 11,12,13 e 14, estamos aplicando o componente
ListView ao layout. Este componente irá receber a lista contendo os registros do banco de dados.
Crie mais um arquivo XML de layout, mas desta vez sem relacionar com uma Activity.
Dê o nome para o arquivo
linha_list_view.xml. Digite todas as leras em caixa baixo. Não é permitido caracteres caixa aula.
Altere o arquivo XML criado para que contenha apenas TextView conforme demonstrado abaixo:
Note que na lista 2 atribuimos um ID para o TextView. Garanta que você nomeou o ID exatamente como demonstrado no exemplo, pois iremos usar este ID para montar a lista.
Refatorando a classe ListaActivity
Adicione um objeto LoginDAO para que possamos acessar o método listaTodos() e recuperar os dados gravados no banco de dados. Isso está demonstrado na linha 17 da imagem abaixo.
Note que estamos utilizando a classe ListView, e será esta classe que montará a lista com os dados a serem apresentados (linha 19).
É necessário um ArrayAdapter tipado, no caso do tipo String. Iremos popular este adapter com os dados a serem apresentados (linha 20).
Vamos programar a busca dos dados e apresentá-los ao usuário.
Como sabemos o método onCreate() de qualquer activity, é executado apenas um única vez, durante a carga da aplicação. É neste momento que preparamos os dados que serão apresentados ao usuário no Layout vinculado à Activity.
Nós criamos na classe LoginDAO o método listarDados. Este método está sendo estânciado e utilizado nas linhas 28 e 33 respectivamente.
Na linha 41, vinculamos a ListView ao Widget ListView definino no Layout activity_lista.
Na linha 43, populamos a ListView com os dados gerados a partir da consulta ao banco de dados.
Como resultato, teremos a lista demonstrada abaixo.
Refatorando o layout da tela Dashboard.
Iremos adicionar mais um ImageView e um TextView ao Dashboard, de forma a permitir que o usuário possa listar os dados gravados no banco de dados, e obviamente, gerados a partir da classe ListActivity.
O resultado final do Layout da Dashboard será este ao final desta aula.
Ícone utilizado
Adicione ao seu layout para a Activity Dashboard os componentes abaixo:
Refatorando o classe DashboardActivity.java.
Nós temos que adicionar o ImageView e implementar o método OnClickListner() para chamar a classe ListaActivity.java.
Adicionando o ImageView
Implementando o método OnClickListner()
Com o código demonstrado acima, nós implementamos o método que permitirá carregar a classe ListarActivity (linha 83).
Fontes do Projeto
Você pode fazer o download dos fontes deste projeto diretamente do repositório GitHub do curso. Mas tente antes, executar esta aula conforme apresentado. No caso de algum problema, poste suas dúvidas, relate suas dificuldades.
Use o projeto fonte como comparativo.
Download do Curso Android Aula 11
Conclusão
Nesta aula, nós implementamos o método listarTodos() do CRUD para recuperar os dados do banco de dados e apresenta o resultado em um lista. O processo de adicionar o segundo método ao CRUD foi simples de ser executada, o que requer é conhecimentos básicos da linguagem Java.
Nesta aula também é possível concluir que o uso de uma arquitetura em camada, vai tornando mais fácil a tarefa de programação através da reutilização de métodos e classes já existentes, como por exemplo, a DataModel, a DataSource e a LoginDAO.