1
resposta

código resultado a posição do objeto vem (-1) na edição

BOA NOITE

Estou com um problema estou passando um objeto para edição para uma outra activity e quando volto esse objeto de volta eu recebo a posição -1 Caused by: java.lang.ArrayIndexOutOfBoundsException: length=10; index=-1. OBS:Eu tinha implementado com o onResume tinha dado certo quando eu edito e salvo no formulário mais eu quero que fique com essa responsabilidade a activity lista igual como o professor Alex Felipe fez ai recebo esse menos -1 vou colocar o código aqui e o link do projeto no git por favor me ajuda ???

OBS:Estou usando o android studio Bumblebee | 2021.1.1 Patch 2 Android Gradle Plugin Version - 7.1.2 Gradle Version 7.2 E Android SDK Build-Tools - 32

OBS :Parece que o objeto está perdendo o index dela. Me ajuda...por favor *Link git: * https://github.com/VanderleiODeMelo/AgendaAlura.git


ListaAlunosActivity


@Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data);

    //AQUI SALVO COM SUCESSO !
    if(requestCode == 1){
        if(resultCode == RESULT_OK && data != null && data.hasExtra(CHAVE_ALUNO)){

            Aluno aluno = (Aluno) data.getSerializableExtra(CHAVE_ALUNO);
            AlunoDao alunoDao = AgendaDataBase.getInstance(this).alunoDao();
            alunoDao.salvar(aluno);
            adapter.salvar(aluno);


        }

    }
    //EDITAR  DA ERRO -1
    if(requestCode == 2){

        if(resultCode == RESULT_OK && data != null && data.hasExtra(CHAVE_ALUNO)){

            Aluno alunoRecebidoEditar = (Aluno) data.getSerializableExtra(CHAVE_ALUNO);
            //OBS:AQUI ESTOU RECEBENDO - 1
            int posicaoRecebida = data.getIntExtra(CHAVE_POSICAO, POSICAO_INVALIDA);

            AlunoDao alunoDao = AgendaDataBase.getInstance(this).alunoDao();
            alunoDao.editar(alunoRecebidoEditar);
            adapter.editar(posicaoRecebida,alunoRecebidoEditar);

        }

    }

}

}


FormularioCadastroActivity


public class FormularioCadastroActivity extends AppCompatActivity {

public static final String TITULO_APPBAR = "Formulario cadastro";

private EditText idCampoNome;
private EditText idCampoEmail;
private EditText idCampoTelefone;
private Aluno aluno;
private int posicaoRecebida = POSICAO_INVALIDA;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_formulario_cadastro);
    setTitle(TITULO_APPBAR);
    inicializarCamposIds();


    //PEGAR A INTENT

    Intent dadosAlunoRecebidos = getIntent();

    if (dadosAlunoRecebidos.hasExtra(CHAVE_ALUNO)) {

        aluno = (Aluno) dadosAlunoRecebidos.getSerializableExtra(CHAVE_ALUNO);
        posicaoRecebida = dadosAlunoRecebidos.getIntExtra(CHAVE_POSICAO, POSICAO_INVALIDA);
        if (aluno != null) {

            idCampoNome.setText(aluno.getNome());
            idCampoEmail.setText(aluno.getEmail());
            idCampoTelefone.setText(aluno.getTelefone());

        }
    } else {

        aluno = new Aluno();
    }


}
 @Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {


    int itemIdMenuSalvar = item.getItemId();
    if (itemIdMenuSalvar == R.id.menu_salvar) {
        //salva
        aluno = criarAluno();
        if (aluno.temIdValido()) {

            Intent intent = new Intent();
            intent.putExtra(CHAVE_ALUNO, aluno);
            intent.putExtra(CHAVE_POSICAO,posicaoRecebida);
            setResult(Activity.RESULT_OK,intent);
             } else {

            Intent vaiParaListaAlunosActivity = new Intent();
            vaiParaListaAlunosActivity.putExtra(CHAVE_ALUNO, aluno);
            setResult(Activity.RESULT_OK, vaiParaListaAlunosActivity);


        }

        finish();
    }
1 resposta

Olá Vanderlei!

Pelo que entendi, você está enfrentando um problema ao passar um objeto para edição em outra activity e, ao retornar, está recebendo a posição -1. Isso está causando um erro de ArrayIndexOutOfBoundsException.

Ao analisar o código que você compartilhou, parece que o problema está na forma como você está passando a posição para a activity de edição. Na activity ListaAlunosActivity, você está chamando startActivityForResult com o requestCode 2, mas não está passando a posição correta como extra no Intent.

Para corrigir isso, você precisa garantir que está passando a posição correta como extra no Intent ao chamar a activity de edição. No método onActivityResult da ListaAlunosActivity, você está recebendo a posição correta como extra no Intent, mas não está usando essa posição ao chamar o método adapter.editar.

Aqui está uma possível solução:

Na ListaAlunosActivity, modifique o trecho de código onde você chama startActivityForResult para passar a posição correta como extra:

Intent intent = new Intent(this, FormularioCadastroActivity.class);
intent.putExtra(CHAVE_ALUNO, aluno);
intent.putExtra(CHAVE_POSICAO, posicao); // substitua 'posicao' pela posição correta do aluno que está sendo editado
startActivityForResult(intent, 2);

Em seguida, na FormularioCadastroActivity, modifique o trecho onde você retorna o resultado para incluir a posição recebida:

Intent intent = new Intent();
intent.putExtra(CHAVE_ALUNO, aluno);
intent.putExtra(CHAVE_POSICAO, posicaoRecebida);
setResult(Activity.RESULT_OK, intent);

Por fim, no método onActivityResult da ListaAlunosActivity, utilize a posição recebida ao chamar o método adapter.editar:

adapter.editar(posicaoRecebida, alunoRecebidoEditar);

Com essas modificações, o objeto deverá ser editado corretamente e a posição não deverá mais ser -1.

Espero ter ajudado e bons estudos!