Montar um Array com dados do banco

Bom dia a todos,

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.

[quote=fbrigatt]Bom dia a todos,

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.

Obrigado pelo retorno,

Não o private nem o final a minha dúvida.

Quero saber a diferença entre:

ArrayList nomes = new ArrayList() E List nomes = new ArrayList();

E como fecho o Cursor, seria:

clientes.close();?

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.

Ok, mais uma vez você me ajudou.