NullPointException when inserting element into list

3

In the code below is a NullPointException, I tried to fix it without completely changing the code but it did not work, does anyone have a simple solution?

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

The class called Crud follows:

public class Crud {

    private Produto produto;

    private Orcamento orcamento;

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


    }  
}

Follow 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;
    }
}

Follow 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;
    }

}

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

    }
}

The following is the error:

Exception in thread "main" java.lang.NullPointerException
at Crud.adicionarProduto(Crud.java:8)
at Teste.main(Teste.java:12)
    
asked by anonymous 08.03.2016 / 18:09

1 answer

7

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

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

In this case, you could optimize your class because you will not be able to add a whole list of Products in place of the old one, so you could change your method setProduto() to addProduto() . See 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 this:

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 constructor or direct in your statement. In the example below I did via constructor, so remember to pass the variable orcamento created on your main to it via constructor like this: Crud ct = new Crud(orcamento); .

Additionally, you do not pass produto to the addProduto method. 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); 
    }  
}
    
08.03.2016 / 18:15