Nullpointexception when inserting element in list

Asked

Viewed 69 times

3

In the code below is coming out a Nullpointexception, I tried to fix without changing completely the code but it did not work, someone has a simple solution?

I’m looking to add a product to the list List<Produto>produtos there in the Budget class.

Follow the class called Crud:

public class Crud {

    private Produto produto;

    private Orcamento orcamento;

    public void adicionarProduto(){ 
        this.orcamento.getProduto().add(produto);
        produto.setOrcamento(orcamento); 


    }  
}

Follows the Budget class

import java.util.List;


public class Orcamento {

    private List<Produto>produtos;
    private String descricao;  

    public String getDescricao() {
        return descricao; 
    }
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public List<Produto> getProduto() {
        return produtos; 
    }
    public void setProduto(List<Produto> produto) {
        this.produtos = produto;
    }
}

Follows the Product class

public class Produto {

    private String nome;
    private double preco;

    private Orcamento orcamento;

    public Orcamento getOrcamento() {
        return orcamento;
    }
    public void setOrcamento(Orcamento orcamento) {
        this.orcamento = orcamento;
    }

    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }

    public double getPreco() {
        return preco;
    }
    public void setPreco(double preco) {
        this.preco = preco;
    }

}

Follows the Test

public class Teste {

    public static void main(String[] args) {
        Orcamento orcamento = new Orcamento();

        Produto produto = new Produto();
        produto.setNome("Feijao");
        produto.setPreco(6.4);

        Crud ct = new Crud(); 
        ct.adicionarProduto();

        orcamento.getProduto();

    }
}

Follow the error:

Exception in thread "main" java.lang.NullPointerException
at Crud.adicionarProduto(Crud.java:8)
at Teste.main(Teste.java:12)

1 answer

7


One of the problems with code is when trying to add a product to an uninitialized list produtos class Orcamento, to initialize your list you can do so:

private List<Produto>produtos = new ArrayList<>();

Still in this case, you could optimize your class as you will hardly add an entire list of Products in place of the old one, so you could change your method setProduto() for addProduto(). See in the example below:

class Orcamento {

    private List<Produto>produtos = new ArrayList<>();
    private String descricao;  

    public String getDescricao() {
        return descricao; 
    }
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public List<Produto> getProdutos() {
        return produtos; 
    }

    public void addProduto(Produto produto) {
        this.produtos.add(produto);
    }
}

To add a new product instead:

this.orcamento.getProduto().add(produto);

You put that:

this.orcamento.addProduto(produto);

I also found some errors in the Crud class, such as not initializing the variable orcamento. You can do this in the class builder or direct in your statement. In the example below I did via constructor, so remember to pass the variable orcamento maid in her main for he saw builder like this: Crud ct = new Crud(orcamento);.

Besides, you don’t pass the produto for the method addProduto. Fixing would look like this:

class Crud {
    private Orcamento orcamento;

    public Crud(Orcamento orcamento) {
        this.orcamento = orcamento;
    }

    public void adicionarProduto(Produto produto){ 
        this.orcamento.addProduto(produto);
        produto.setOrcamento(orcamento); 
    }  
}
  • I optimised, but it’s still giving nullPointException, I think it’s in main... But I’m not getting

  • See the update I made in the reply, please.

  • Okey made the changes q vc changed, thanks Math, but printing the list in main System.out.println(budget.getProducts()); is empty

  • You can create a constructor in Crud() and initialize its budget variable like this. I will update the code

  • Ready! : )

  • 1

    Vlww, thank you very much. Now gave Ceto :D

Show 1 more comment

Browser other questions tagged

You are not signed in. Login or sign up in order to post.