Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

ArrayIndexOutOfBoundsException

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);

    }
}
1 resposta
solução!

Foi só eu seguir adiante que o professor distribuiu o código e o programa voltou a funcionar. Sinceramente não sei dizer o que estava errado, deve ser um erro bem sutil que ainda não percebi.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software