Erros ao fim da aula 2 com relação a câmera (no vídeo 1, que é só a criação de design tudo funcionou. No vídeo 2 aonde as funções do botão são implementadas e você pode tirar a foto de fato, só ao registrar a foto o apk parava de funcionar, a partir do vídeo 3 aonde a foto é salva na memoria, o apk nem executa mais e o emulador já abre dizendo que a agenda crashou se deseja abrir novamente. PS: Já segui as devidas correções e adaptações pro Android 7 e atualmente estou no Android 8 em minha maquina virtual.
Logcat:
Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3621)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2862)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
at android.database.CursorWindow.nativeGetString(Native Method)
at android.database.CursorWindow.getString(CursorWindow.java:438)
at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
at com.tales.agenda.DAO.AlunoDAO.buscaAlunos(AlunoDAO.java:78)
at com.tales.agenda.ListaAlunosActivity.carregaLista(ListaAlunosActivity.java:62)
at com.tales.agenda.ListaAlunosActivity.onResume(ListaAlunosActivity.java:72)
...
Linha relacionada ao AlunoDAO java 78:
aluno.setFoto(c.getString(c.getColumnIndex("caminhoFoto")));
Relacionado ao ListaAlunos java 62:
AlunoDAO dao = new AlunoDAO(this);
List<Aluno> alunos = dao.buscaAlunos();
Relacionado ao ListaAlunos 72:
carregaLista();
Codigo do AlunoDAO:
public class AlunoDAO extends SQLiteOpenHelper {
public AlunoDAO (Context context) {
super(context, "Agenda", null, 1);
}
@Override
public void onCreate (SQLiteDatabase db) {
String sql = "CREATE TABLE Alunos (id INTEGER PRIMARY KEY, nome TEXT NOT NULL, endereco TEXT, telefone TEXT, site TEXT, nota REAL, caminhoFoto TEXT);";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String sql = "";
switch (oldVersion){
case 1:
sql = "ALTER TABLE Alunos ADD COLUMN caminhoFoto TEXT";
}
db.execSQL(sql);
}
public void insert(Aluno aluno) {
SQLiteDatabase db = getWritableDatabase();
ContentValues dados = pegaDadosAluno(aluno);
db.insert("Alunos", null, dados );
}
@NonNull
private ContentValues pegaDadosAluno(Aluno aluno) {
ContentValues dados = new ContentValues();
dados.put("nome", aluno.getNome());
dados.put("endereco", aluno.getEndereco());
dados.put("telefone", aluno.getTelefone());
dados.put("site", aluno.getSite());
dados.put("nota", aluno.getNota());
dados.put("caminhoFoto", aluno.getFoto());
return dados;
}
public List<Aluno> buscaAlunos() {
String sql = "SELECT * FROM Alunos;";
SQLiteDatabase db = getReadableDatabase();
Cursor c = db.rawQuery(sql, null);
List<Aluno> alunos = new ArrayList<Aluno>();
while (c.moveToNext()) {
Aluno aluno = new Aluno();
aluno.setId(c.getLong(c.getColumnIndex("id")));
aluno.setNome(c.getString(c.getColumnIndex("nome")));
aluno.setEndereco(c.getString(c.getColumnIndex("endereco")));
aluno.setTelefone(c.getString(c.getColumnIndex("telefone")));
aluno.setSite(c.getString(c.getColumnIndex("site")));
aluno.setNota(c.getDouble(c.getColumnIndex("nota")));
aluno.setFoto(c.getString(c.getColumnIndex("caminhoFoto")));
alunos.add(aluno);
}
//fecha conexao com o banco de dados
c.close();
//retorna os alunos colhidos
return alunos;
}
public void delet(Aluno aluno) {
SQLiteDatabase db = getWritableDatabase();
String [] params = {String.valueOf(aluno.getId())};injection passando uma lista de parametros por string
db.delete("Alunos", "id = ?", params);
}
public void alter(Aluno aluno) {
SQLiteDatabase db = getWritableDatabase();
ContentValues dados = pegaDadosAluno(aluno);
String[] params ={aluno.getId().toString()};
db.update("Alunos", dados, "id = ?", params);
}
}