Olá!
Estive acompanhando a implementação de todas as tasks sem problemas, até a task de Editar Aluno.
Nela, após fazer todas as alterações/implementações necessárias, e ir testar a app, a mesma não atualiza os telefones e, ainda, quebra.
O erro é muito fácil de identificar, já que a lista que passamos como parametro telefonesDoAluno
não possui instância nenhuma, nem inicialização em parte alguma do FormActivity. Tanto que sua cor de destaque no atributo permanece cinza. Por isso, ao tentar iterar sobre ela quando tentamos executar o Edita, eu obtenho a exception.
Tentei procurar no código do instrutor onde ele atribui valores para essa lista, mas não achei... alguém teria alguma ideia para me ajudar?
Obrigado desde já!
private EditText campoNome;
private EditText campoTelefoneFixo;
private EditText campoTelefoneCelular;
private EditText campoEmail;
private AlunoDAO alunoDAO;
private Aluno aluno;
private TelefoneDAO telefoneDAO;
private List<Telefone> telefonesDoAluno;
private void preencheCamposTelefone() {
new BuscaTodosTelefonesDoAlunoTask(telefoneDAO, aluno, new BuscaTodosTelefonesDoAlunoTask.TelefonesEncontradosListener() {
@Override
public void quandoEncontrados(List<Telefone> telefonesDoAluno) {
for (Telefone telefone :
telefonesDoAluno) {
if (telefone.getTipo() == TipoTelefone.TELEFONE_FIXO) {
campoTelefoneFixo.setText(telefone.getNumero());
} else {
campoTelefoneCelular.setText(telefone.getNumero());
}
}
}
}).execute();
}
private void editaAluno(Telefone telefoneFixo, Telefone telefoneCelular) {
new EditaAlunoTask(alunoDAO, aluno, telefoneFixo, telefoneCelular, telefoneDAO, telefonesDoAluno, this::finish).execute();
}
public class EditaAlunoTask extends AsyncTask<Void, Void, Void>{
private final AlunoDAO alunoDAO;
private final Aluno aluno;
private final Telefone telefoneFixo;
private final Telefone telefoneCelular;
private final TelefoneDAO telefoneDAO;
private List<Telefone> telefonesDoAluno;
private final AlunoEditadoListener listener;
public EditaAlunoTask(AlunoDAO alunoDAO, Aluno aluno, Telefone telefoneFixo, Telefone telefoneCelular, TelefoneDAO telefoneDAO, List<Telefone> telefonesDoAluno, AlunoEditadoListener listener) {
this.alunoDAO = alunoDAO;
this.aluno = aluno;
this.telefoneFixo = telefoneFixo;
this.telefoneCelular = telefoneCelular;
this.telefoneDAO = telefoneDAO;
this.telefonesDoAluno = telefonesDoAluno;
this.listener = listener;
}
@Override
protected Void doInBackground(Void... voids) {
alunoDAO.edita(aluno);
vinculaAlunoComTelefone(aluno.getId(), telefoneFixo, telefoneCelular);
atualizaIdTelefones(telefoneFixo, telefoneCelular);
telefoneDAO.atualiza(telefoneFixo, telefoneCelular);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
listener.quandoEditado();
}
public interface AlunoEditadoListener {
void quandoEditado();
}
private void atualizaIdTelefones(Telefone telefoneFixo, Telefone telefoneCelular) {
for (Telefone telefone :
telefonesDoAluno) {
if (telefone.getTipo() == TipoTelefone.TELEFONE_FIXO) {
telefoneFixo.setId(telefone.getId());
} else {
telefoneCelular.setId(telefone.getId());
}
}
}
private void vinculaAlunoComTelefone(int alunoId, Telefone...telefones) {
for (Telefone telefone :
telefones) {
telefone.setAlunoId(alunoId);
}
}
}