Eu fiz o exercício mas não entendi o propósito e não sei se fiz certo pois não há o gabarito. Alguém consegue me explicar porque foi solicitada essa mudança no DAO e qual seria a resposta correta do exercício?
Exercício 12 - Persistência com SQLite:
(opcional - difícil) Se possuirmos mais de um DAO em nossa aplicação não poderemos usar a estratégia de fazer todos herdarem de SQLiteOpenHelper e depois usar mais de um DAO na mesma Activity. Nesse caso precisaremos utilizar composição no lugar de herança. Antecipe-se e altere seu DAO para TER-UM (ter um atributo do tipo) e não SER-UM (extends) SQLiteOpenHelper.
Minha resposta foi:
package br.com.caelum.cadastro.dao;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import br.com.caelum.cadastro.modelo.Aluno;
public class AlunoDAO {
private static final String DATABASE = "CadastroCaelum";
private static final int VERSAO = 1;
private SQLiteOpenHelper sqlHelper;
public AlunoDAO(Context context) {
this.sqlHelper = new SQLiteOpenHelper(context, DATABASE, null, VERSAO) {
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String ddl = "DROP TABLE IF EXISTS Alunos";
db.execSQL(ddl);
this.onCreate(db);
}
@Override
public void onCreate(SQLiteDatabase db) {
String ddl = "CREATE TABLE Alunos (id PRIMARY KEY, "+
" nome TEXT UNIQUE NOT NULL, telefone TEXT,"+
" endereco TEXT, site TEXT, foto TEXT, nota REAL);";
db.execSQL(ddl);
}
};
}
public void salva(Aluno aluno) {
sqlHelper.getWritableDatabase().insert("Alunos", null, toValues(aluno));
}
private ContentValues toValues(Aluno aluno) {
ContentValues values = new ContentValues();
values.put("id", aluno.getId());
values.put("nome", aluno.getNome());
values.put("telefone", aluno.getTelefone());
values.put("endereco", aluno.getEndereco());
values.put("site", aluno.getSite());
values.put("foto", aluno.getFoto());
values.put("nota", aluno.getNota());
return values;
}
public List<Aluno> getLista() {
String[] colunas = {"id","nome","telefone","endereco","site","foto","nota"};
Cursor cursor = sqlHelper.getWritableDatabase().query("Alunos", colunas, null, null, null, null, null);
ArrayList<Aluno> alunos = new ArrayList<Aluno>();
while (cursor.moveToNext()) {
Aluno aluno = new Aluno();
aluno.setId(cursor.getLong(0));
aluno.setNome(cursor.getString(1));
aluno.setTelefone(cursor.getString(2));
aluno.setEndereco(cursor.getString(3));
aluno.setSite(cursor.getString(4));
aluno.setFoto(cursor.getString(5));
aluno.setNota(cursor.getDouble(6));
alunos.add(aluno);
}
return alunos;
}
public void close() {
this.sqlHelper.close();
}
}