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

(ArrayIndexOutOfBoundsException) ao setara posição do aluno

Esse foi o output do logcat de duas linhas antes do erro até o final. Lembrando que para melhor me localizar usei a tag DEBUG pra saber o momento exato do crash, so depois percebi que poderia ter clicado no link que a msg de erro proporciona, ela leva direto a linha de erro dentro do codigo

2020-01-16 18:31:48.633 30793-30793/br.com.alura.agenda I/DEBUG: AlunoEncontrado
2020-01-16 18:31:48.633 30793-30793/br.com.alura.agenda I/DEBUG: PosicaoIndexDefinida
2020-01-16 18:31:48.635 30793-30793/br.com.alura.agenda E/AndroidRuntime: FATAL EXCEPTION: main
    Process: br.com.alura.agenda, PID: 30793
    java.lang.ArrayIndexOutOfBoundsException: length=10; index=-1
        at java.util.ArrayList.set(ArrayList.java:429)
        at br.com.alura.agenda.dao.AlunoDAO.edita(AlunoDAO.java:34)
        at br.com.alura.agenda.ui.activity.FormularioAlunoActivity$1.onClick(FormularioAlunoActivity.java:55)
        at android.view.View.performClick(View.java:5640)
        at android.view.View$PerformClick.run(View.java:22455)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6165)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778

Aqui esta o AlunoDAO.java

package br.com.alura.agenda.dao;

import android.util.Log;

import java.util.ArrayList;
import java.util.List;

import br.com.alura.agenda.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) {
        int idAluno = aluno.getId();
        Aluno alunoEncontrado = null;
        for (Aluno a :
                alunos) {
            if (a.getId() == aluno.getId()) {
                alunoEncontrado = aluno;
            }
        }
        if (alunoEncontrado != null) {
            Log.i("DEBUG", "AlunoEncontrado");
            int posicaoDoAluno = alunos.indexOf(alunoEncontrado);
            Log.i("DEBUG", "PosicaoIndexDefinida");
            alunos.set(posicaoDoAluno, aluno);
            Log.i("DEBUG", "setAlunoNaPosição");
        }else{
            Log.i("DEBUG", "AlunoNaoEncontrado");
        }

    }

    public List<Aluno> todos() {
        return new ArrayList<>(alunos);
    }
}

Por enquanto vou baixar e usar os arquivos que tem no curso pra continuar sem problemas, assim que eu entender onde errei ou alguem descobrir, eu marco como "Solucionado"

1 resposta
solução!

O erro foi que eu passava o parametro errado para a variavel 'alunoEncontrado' segue abaixo o código funcional do método 'edita()', da classe AlunoDAO

 public void edita(Aluno aluno) {
        Aluno alunoEncontrado = null;
        for (Aluno a :
                alunos) {
            if (a.getId() == aluno.getId()) {
                alunoEncontrado = a;
            }
        }
        if (alunoEncontrado != null) {
            Log.i("DEBUG", "AlunoEncontrado");
            int posicaoDoAluno = alunos.indexOf(alunoEncontrado);
            Log.i("DEBUG", "PosicaoIndexDefinida");
            alunos.set(posicaoDoAluno, aluno);
            Log.i("DEBUG", "setAlunoNaPosição");
        }else{
            Log.i("DEBUG", "AlunoNaoEncontrado");
        }

    }

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