Olá Jeferson.
O que me disse faz bastante sentido, mas qual a grande questão que esqueci de destacar.
Na minha DAO eu uso objetos diferentes, olhe meu código.
public void inserirAluno(Aluno aluno){
ContentValues values = getContentValues(aluno);
try {
SQLiteDatabase db = getWritableDatabase();
db.insert(AlunoEs.TABELA + "", null, values);
db.close();
}catch (Exception e){
throw new RuntimeException(e);
}
}
Agora olhe meu código de consulta.
public List<Aluno> getAllAlunos(){
List<Aluno> alunos = new ArrayList<Aluno>();
String dml = "SELECT * FROM " + AlunoEs.TABELA.toString();
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.rawQuery(dml,null);
while (cursor.moveToNext()){
Aluno aluno = getAluno(cursor);
alunos.add(aluno);
}
return alunos;
}
Utilizo de objetos diferentes, isto não ocasiona nenhum problema para a aplicação.
Mesmo executando as operações em seguida como chegou a mencionar:
public void cadastrar(View view){
Aluno aluno = new Aluno();
aluno.setNome(((EditText) findViewById(R.id.nome)).getText().toString());
aluno.setEndereco(((EditText) findViewById(R.id.endereco)).getText().toString());
aluno.setTelefone(((EditText) findViewById(R.id.telefone)).getText().toString());
aluno.setSite(((EditText) findViewById(R.id.site)).getText().toString());
aluno.setNota(((RatingBar) findViewById(R.id.nota)).getRating());
AlunoDAO dao = new AlunoDAO(this);
dao.inserirAluno(aluno);
List<Aluno> alunos = dao.getAllAlunos();
CustomAdapter adapter = new CustomAdapter(alunos,this);
MainActivity.myList.setAdapter(adapter);
onBackPressed();
}
Acho que pode haver casos e acasos, porém a solução funciona e acho que funciona bem.
Não conseguir fazer ela apresentar erros.
Claro que se a rotina for mais elaborada, talvez o fechamento deva ser invado por quem usa o objeto, porém fiz um estudo um pouco detalhado sobre isto, pois tive diversos problema do esquecimento de fechamento de consultas.
Vou estar publicando o código no Github e poderá acompanhar.