有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java ArrayList<object>inside ArrayList<anotherObject>在类中,以在RecyclerView中发送数据

对不起,我是法语

我有3个类,其中2个有ArrayList。不幸的是,我的2 ArrayList对象无法工作。我在Android Studio中使用Java

第一类:面板:


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

第二类:区块:

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

第三级(最后一级):断路器:

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

我的主要活动:

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

我犯的错误

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:(这就是方法)

setUserInfo();

第48页:

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

提前感谢您的帮助:)


共 (1) 个答案

  1. # 1 楼答案

    因为全局变量private ArrayList<Breaker> listBreaker;从未分配给新列表,所以它将保持NULL

    onCreate中,您只是将List<Breaker> listBreaker = new ArrayList<Breaker>();新对象分配给另一个列表

    相反,它应该如下所示:

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

    有关空指针的详细信息:What is a NullPointerException, and how do I fix it?