Tenho o seguinte código que gostaria de saber se pode melhorar ou está correto. Ele cria um Array com dados do banco e mostra na lista.
final List<String> nomes = new ArrayList<String>();
mDb.open();
Cursor clientes = mDb.getTodosClientes();
while (clientes.moveToNext()) {
nomes.add(clientes.getString(clientes.getColumnIndex(DbAdapter.KEY_NOME)));
}
Qual a diferença de:
Para:
Quero um jeito certo, se precisar montar um Array do Banco, está correto como postei?
pelo que entendi você quer montar um array de objetos por exemplo.
ArrayList<Pessoa> p = new ArrayList<Pessoa>(); //para isso crie uma classe pessoa com todos os atributos, e métodos getters and setters
Pessoa p1 = new Pessoa(); //cria objeto pessoa
p1.setNome("nome"); //seta nome no objeto criado
p1.setIdade(20); //seta idade
p1.setEmail("blabla@.com.br"); //seta email
p.add(p1); //insere objeto pessoa no array list do tipo pessoa;
a diferença do modificador de acesso private vs final; é de que argumentos private só podem ser acessados por métodos publicos de dentro da classe; e final define o atributo como fixo, ou seja, o valor não poderá ser modificado.
Tenho o seguinte código que gostaria de saber se pode melhorar ou está correto. Ele cria um Array com dados do banco e mostra na lista.
final List<String> nomes = new ArrayList<String>();
mDb.open();
Cursor clientes = mDb.getTodosClientes();
while (clientes.moveToNext()) {
nomes.add(clientes.getString(clientes.getColumnIndex(DbAdapter.KEY_NOME)));
}
[/quote]
Não esqueça de fechar o cursor após utilizá-lo.
[quote=fbrigatt]Qual a diferença de:
Para:
[/quote]
É bom você ler um livro de Java pra distinguir bem o que são estes modificadores. private, public e protected referem-se a visibilidade do atributo, você tem que analisar a situação para saber onde aplicá-los. Não existe “modificador x é certo para trabalhar com banco”.
Apenas sugiro que você declare o atributo usando List, ao invés de ArrayList (como está no segundo exemplo). ArrayList é uma implementação de List. Se você quiser mudar para LinkedList vai ser mais fácil, por exemplo.
List é uma interface. ArrayList é a implementação da interface, mas poderia ser outra implementação, por exemplo, LinkedList. A recomendação é declarar a variável usando List, por que aí se você quiser mudar a implementação da Lista para um LinkedList ao invés de ArrayList, vai ser uma simples questão de alterá-la no momento de instanciação (as referências já estarão preparadas).
É o método close que fecha o cursor, mas não esqueça de envolver o código num block try/finally:
List<String> nomes = new ArrayList<String>();
mDb.open();
try {
Cursor clientes = mDb.getTodosClientes();
while (clientes.moveToNext()) {
nomes.add(clientes.getString(clientes.getColumnIndex(DbAdapter.KEY_NOME)));
}
} finally {
mDb.close();
}
Assim você garante que mesmo que ocorra um erro, o cursor será fechado.