Search code examples
javaandroidclassobjectarraylist

ArrayList<object> inside ArrayList<anotherObject> inside a class, to send the data in RecyclerView


I have 3 class and 2 of them have ArrayList. Unfortunately, my object with the 2 ArrayList won't work. I use Java in Android Studio

First class : Panel :


public class Panel {
    public String nameUser;
    public String street;
    public String panelId;
    public ArrayList<Block> listBlock;

    public Panel(String nameUser, String street, String panelId, ArrayList<Block> listBlock) {
        this.nameUser = nameUser;
        this.street = street;
        this.panelId = panelId;
        this.listBlock = listBlock;
    }


    public String getNameUser() {
        return nameUser;
    }

    public void setNameUser(String nameUser) {
        this.nameUser = nameUser;
    }

    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }

    public String getPanelId() {
        return panelId;
    }

    public void setPanelId(String panelId) {
        this.panelId = panelId;
    }

    public ArrayList<Block> getListBlock() {
        return listBlock;
    }

    public void setListBlock(ArrayList<Block> listBlock) {
        this.listBlock = listBlock;
    }
}

Second class : Block :

import java.util.ArrayList;

public class Block {

    public String nameLine;
    public ArrayList<Breaker> listBreaker;

    public String getNameLine() {
        return nameLine;
    }

    public void setNameLine(String nameLine) {
        this.nameLine = nameLine;
    }

    public ArrayList<Breaker> getListBreaker() {
        return listBreaker;
    }

    public void setListBreaker(ArrayList<Breaker> listBreaker) {
        this.listBreaker = listBreaker;
    }

    public Block(String nameLine, ArrayList<Breaker> listBreaker) {
        this.nameLine = nameLine;
        this.listBreaker = listBreaker;
    }
}

Third ( Last class) : Breaker :

public class Breaker {
    public String name;
    public String utilisation;

    public Breaker(String name, String utilisation) {
        this.name = name;
        this.utilisation = utilisation;
    }


    public String getNom() {
        return name;
    }

    public void setNom(String nom) {
        this.name = name;
    }

    public String getUtilisation() {
        return utilisation;
    }

    public void setUtilisation(String utilisation) {
        this.utilisation = utilisation;
    }
}

My MainActivity :

public class Activity_PanelHome extends AppCompatActivity {

    private ArrayList<Panel> listPanel;
    private ArrayList<Block> listBlock;
    private ArrayList<Breaker> listBreaker;
    private RecyclerView recyclerView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_panelhome);


        recyclerView = findViewById(R.id.recyclerViewHomePage);
        ArrayList<Panel> listPanel = new ArrayList<>();
        List<Block> listBlock = new ArrayList<>();
        List<Breaker> listBreaker = new ArrayList<Breaker>();

        setUserInfo();
        setAdapter();
    }
    private void setAdapter() {
        RecyclerAdapter adapter = new RecyclerAdapter(listPanel);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.setAdapter(adapter);
    }

    private void setUserInfo() {
        listBreaker.add(new Breaker("BreakerName","BreakerUtilisation"));
        listBlock.add(new Block("BlockName",listBreaker));
        listPanel.add(new Panel("PanelUserName","PanelStreet","PanelId",listBlock));
    }
}

The error I got

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.add(java.lang.Object)' on a null object reference
        at com.example.application.Activity.Activity_PanelHome.setUserInfo(Activity_PanelHome.java:48)
        at com.example.application.Activity.Activity_PanelHome.onCreate(Activity_PanelHome.java:36)

Ligne 36 : (It's the method)

setUserInfo();

Ligne 48 :

listBreaker.add(new Breaker("BreakerName","BreakerUtilisation"));

Thank you in advance for your help :)


Solution

  • Because your Global variable private ArrayList<Breaker> listBreaker; is never assigned to the new list it stays NULL.

    In your onCreate you're just assigning List<Breaker> listBreaker = new ArrayList<Breaker>(); new object to another list.

    Instead it should be as following:

    listPanel = new ArrayList<>();
    listBlock = new ArrayList<>();
    listBreaker = new ArrayList<Breaker>();
    

    For more info on Null pointers: What is a NullPointerException, and how do I fix it?