Error with List with null reference in Java

0
Calling any method on any null reference will always result in an exception. How could I solve this?

public class frmStatusAprovacaoGeral implements AdapterInterface{


    @Override
    public void back(EntityWrapper arg0, Activity arg1) {

    }

    @Override
    public void start(Task arg0, EntityWrapper arg1, Activity arg2) {
        // Pega Entity wrapper do Processo
        WFProcess process = arg2.getProcess();
        NeoObject obj = process.getProcessEntity();
        EntityWrapper ewobj = new EntityWrapper(obj);


        //tenha a lista de parcelas 
        Long numeroParcelas;
        try {
            numeroParcelas = (Long) ewobj
                    .findValue("contratoEformPosEscolha.pagamento.nroParcelas");
        } catch (Exception e) {
            numeroParcelas = (long) 1;
        }

                //estou pegando o campo aprovacaoGerencia para saber se ela foi aprovada
                List<NeoObject> listaParcelasGerencia = (List<NeoObject>) ewobj
                .findValue("frmParcelasAprovacaoGerencia");

                //estou pegando o campo aprovacaoAprovadorExtra para saber se ela foi aprovada
                List<NeoObject> listaParcelasExtraUm = null;
                try{
                listaParcelasExtraUm = (List<NeoObject>) ewobj
                        .findValue("frmParcelasAprovadorExtraUm");
                }catch(Exception e){
                    Log.error(e);
                }


                //estou pegando o campo aprovacaoAprovadorExtra2 para saber se ela foi aprovada 
                List<NeoObject> listaParcelasExtraDois = null;
                try{
                    listaParcelasExtraDois = (List<NeoObject>) ewobj
                        .findValue("frmParcelasAprovadorExtraDois");
                } catch (Exception e){
                    Log.error(e);
                }


                //estou pegando o campo aprovacaoAprovadorExtra3 para saber se ela foi aprovada 
                List<NeoObject> listaParcelasExtraTres = null;
                try {
                    listaParcelasExtraTres = (List<NeoObject>) ewobj
                            .findValue("frmParcelasAprovadorExtraTres");
                } catch (Exception e) {
                    Log.error(e);
                }



                //estou adicionando as respostas na listaParcelas
                List<NeoObject> ListaParcelaAtualGeral = (List<NeoObject>) ewobj
                .findValue("contratoEformPosEscolha.listaParcelas");


        for (long i = 0; i < numeroParcelas; i++) {

            NeoObject parcelaAtualGeral = ListaParcelaAtualGeral.get((int) i);
            EntityWrapper ewParcelaAtualGeral = new EntityWrapper(parcelaAtualGeral);

            //gerência
            //----------------------------------------------------------------------
            NeoObject parcelaAtualGerencia = listaParcelasGerencia.get((int) i);
            EntityWrapper ewParcelaAtual = new EntityWrapper(parcelaAtualGerencia);

            boolean aprovacaoGerencia = (boolean) ewParcelaAtual.findValue("aprovacaoGerencia");    
            ewParcelaAtualGeral.setValue("aprovacaoGerencia", aprovacaoGerencia);
            //----------------------------------------------------------------------

            //extra um
            //Chamar qualquer método em qualquer referência nula sempre resultará em uma exceção. 
            //Teste se o objeto é nulo primeiro:
            //----------------------------------------------------------------------
            if ( (listaParcelasExtraUm != null) || !listaParcelasExtraUm.isEmpty()){
                NeoObject parcelaAtualExtraUm = listaParcelasExtraUm.get((int) i);
                EntityWrapper ewParcelaAtualExtraUm = new EntityWrapper(parcelaAtualExtraUm);

                boolean aprovacaoAtualExtra1 = (boolean) ewParcelaAtualExtraUm.findValue("aprovacaoAprovadorExtra");    
                ewParcelaAtualGeral.setValue("aprovacaoAprovadorExtra", aprovacaoAtualExtra1);
            }
            //----------------------------------------------------------------------

            //extra dois
            //----------------------------------------------------------------------
            if ( (listaParcelasExtraDois != null) || !listaParcelasExtraDois.isEmpty()){
                NeoObject parcelaAtualExtraDois = listaParcelasExtraDois.get((int) i);
                EntityWrapper ewParcelaAtualExtraDois = new EntityWrapper(parcelaAtualExtraDois);

                boolean aprovacaoAtualExtra2 = (boolean) ewParcelaAtualExtraDois.findValue("aprovacaoAprovadorExtra2"); 
                ewParcelaAtualGeral.setValue("aprovacaoAprovadorExtra2", aprovacaoAtualExtra2);
            }
            //----------------------------------------------------------------------


            //extra três
            //----------------------------------------------------------------------
            if ( ( listaParcelasExtraTres != null) || !listaParcelasExtraTres.isEmpty()){
                NeoObject parcelaAtualExtraTres = listaParcelasExtraTres.get((int) i);
                EntityWrapper ewParcelaAtualExtraTres = new EntityWrapper(parcelaAtualExtraTres);

                boolean aprovacaoAtualExtra3 = (boolean) ewParcelaAtualExtraTres.findValue("aprovacaoAprovadorExtra3"); 
                ewParcelaAtualGeral.setValue("aprovacaoAprovadorExtra3", aprovacaoAtualExtra3);
            }
            //----------------------------------------------------------------------


            PersistEngine.persist(parcelaAtualGeral);

        }   
    }   
    @Nullable
    Long ValidaCampo() {
        return null;

    }

}
    
asked by anonymous 03.02.2017 / 14:29

3 answers

1
  Calling any method on any null reference will always result in an exception. How could I solve this?

Checking if the list is null or not before trying to access anything in it

Ex:

if(listaParcelasExtra != null){
    listaParcelasExtra.fazerAlgumaCoisa();
}
    
03.02.2017 / 14:40
1

You can set a default value if it is null, for example:

if (listaParcelasExtraUm == null) {
  listaParcelasExtraUm = new ArrayList<>();
}

Or simplifying using ternary operator:

listaParcelasExtraUm = listaParcelasExtraUm == null ? new ArrayList<>() : listaParcelasExtraUm;
    
03.02.2017 / 14:42
0

If you want, you can remove all null entries from your lists and continue working normally without having to check entry per entry:

suaLista.removeAll(Collections.singleton(null));

Original post

    
03.02.2017 / 19:48