Quando aperto o botão de salvar no formulário no usuário que está em primeiro na lista, acontece esse erro:
2019-09-07 11:22:54.650 6934-6934/br.com.pacotecursoalura E/AndroidRuntime: FATAL EXCEPTION: main
Process: br.com.pacotecursoalura, PID: 6934
java.lang.ArrayIndexOutOfBoundsException: length=10; index=-1
at java.util.ArrayList.set(ArrayList.java:455)
at br.com.pacotecursoalura.dao.AlunoDAO.edita(AlunoDAO.java:29)
at br.com.pacotecursoalura.ui.activity.FormularioAlunoActivity$1.onClick(FormularioAlunoActivity.java:43)
at android.view.View.performClick(View.java:6597)
at android.view.View.performClickInternal(View.java:6574)
at android.view.View.access$3100(View.java:778)
at android.view.View$PerformClick.run(View.java:25885)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Já se eu tento editar outro usuário, o programa roda sem problemas.
Eu queria enviar todo o código, mas não cabe tudo, então vou mostrar apenas aonde foi percorrido.
Na classe Aluno, o id está inicializando com 0.
AlunoDAO.java:29
package br.com.pacotecursoalura.dao;
import java.util.ArrayList;
import java.util.List;
import br.com.pacotecursoalura.model.Aluno;
public class AlunoDAO {
private final static List<Aluno> alunos = new ArrayList<>();
private static int contadorDeIds = 1;
public void salva(Aluno aluno) {
aluno.setId(contadorDeIds);
alunos.add(aluno);
contadorDeIds++;
}
public void edita(Aluno aluno) {
Aluno alunoEncontrado = null;
for (Aluno a:
alunos) {
if(a.getId() == aluno.getId()) {
alunoEncontrado = a;
}
if(alunoEncontrado != null) {
int posicaoDoAluno = alunos.indexOf(alunoEncontrado);
alunos.set(posicaoDoAluno, aluno); //Essa é a linha 29
}
}
}
public List<Aluno> todos() {
return new ArrayList<>(alunos);
}
}
FormularioAlunoActivity.java:43
package br.com.pacotecursoalura.ui.activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import androidx.appcompat.app.AppCompatActivity;
import br.com.pacotecursoalura.R;
import br.com.pacotecursoalura.dao.AlunoDAO;
import br.com.pacotecursoalura.model.Aluno;
public class FormularioAlunoActivity extends AppCompatActivity {
private EditText campoNome;
private EditText campoTelefone;
private EditText campoEmail;
final AlunoDAO dao = new AlunoDAO();
private Aluno aluno;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_formulario_aluno);
inicializacaoDosCampos();
configuraBotaoSalvar();
Intent pegaIntentListaAlunosActivity = getIntent();
aluno = (Aluno) pegaIntentListaAlunosActivity.getSerializableExtra("Aluno");
campoNome.setText(aluno.getNome());
campoTelefone.setText(aluno.getTelefone());
campoEmail.setText(aluno.getEmail());
}
private void configuraBotaoSalvar() {
Button botaoSalvar = findViewById(R.id.activity_formulario_aluno_botao_salvar);
botaoSalvar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
preencheAluno();
dao.edita(aluno); //Essa é a linha 43
finish();
}
});
}
private void inicializacaoDosCampos() {
campoNome = findViewById(R.id.activity_formulario_aluno_nome);
campoTelefone = findViewById(R.id.activity_formulario_aluno_telefone);
campoEmail = findViewById(R.id.activity_formulario_aluno_email);
}
private void salva(Aluno aluno) {
dao.salva(aluno);
finish();
}
private void preencheAluno() {
String nome = campoNome.getText().toString();
String telefone = campoTelefone.getText().toString();
String email = campoEmail.getText().toString();
aluno.setNome(nome);
aluno.setTelefone(telefone);
aluno.setEmail(email);
}
}