无法将子节点添加到树节点



我从数据库中检索数据,将其放入自定义类DataClass中,然后将mydata格式化为节点数组列表,直到这里一切都很好。然后,我想对我的数据进行循环,并将子节点添加到每个节点。但是我遇到了一个NullPointerException错误...

所以我的类看起来像:

@Entity
public class DataClass {
    @Id
    private Integer id;
    private String structureDescription;
    private String structId;
    private String structureTag;
    private Integer elementId;
    private String elementDescription;
    private Integer elementsSuite;
    private String elementTag;
    private Integer parent;
    private Integer elementTypeId;

然后我有一个节点类:

public class Node {
    private String id = "-1";
    private List<Node> children = null;
    private String parent = "#";
    private String text = "";
    public Node(){}
    public Node(String id, String parent, String text) {
        this.id = id;
        this.parent = parent;
        this.text = text;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public List<Node> getChildren() {
        return children;
    }
    public void setChildren(List<Node> children) {
        this.children = children;
    }
    public void addChild(Node child)
    {
        children.add(child);
    }
    public String getParent() {
        return parent;
    }
    public void setParent(String parent) {
        this.parent = parent;
    }
    public String getText() {
        return text;
    }
    public void setText(String text) {
        this.text = text;
    }
    public boolean equals(Node node)
    {
        return node.getText().equals(getText());
    }
}

所以我有一个方法可以将 DataClass 对象列表格式化为 anArrayList of Nodes:

public ArrayList<Node> formatData(List<DataClass> dbData)
{
    ArrayList<Node> result = new ArrayList<>();
    for(DataClass dbDataElement : dbData)
    {
        Node node = new Node();
        node.setId(String.valueOf(dbDataElement.getId()) == null ? "" : String.valueOf(dbDataElement.getId()));
        node.setParent(String.valueOf(dbDataElement.getParent()));
        node.setText((dbDataElement.getElementTag() == null)  ? dbDataElement.getStructId() : dbDataElement.getElementTag());
        result.add(node);
    }
    return result;
}

然后我有一个方法应该找到每个节点的所有子节点:

public ArrayList<Node> addNodeChildren(ArrayList<Node> formattedNodes)
{
    ArrayList<Node> result = new ArrayList<>();
    for(Node parent: formattedNodes)
    {
        for(Node possibleChild: formattedNodes)
        {
            if(String.valueOf(parent.getId()).equals(possibleChild.getParent()))
            {
                parent.addChild(possibleChild);
            }
        }
    }
    return result;
}

但是当我从控制器调用return mainService.addNodeChildren(mainService.formatData(dbData));时,我遇到了此错误:

09-May-2017 11:06:18.498 严重 [http-nio-8080-exec-211] null.null An 由于异常映射器失败,未映射异常。HTTP 500 响应将重新转变。
java.lang.NullPointerException

    at be.groups.observatory.domainmodel.Node.addChild(Node.java:38)         
    at be.groups.observatory.be.groups.observatory.services.MainService.addNodeChildren(MainService.java:37)
    at be.groups.ui.resource.StructureResource.getAllChildren(StructureResource.java:130)

您从未启动过子实例,

有许多修复程序,其中之一是您可以更改方法addChild

   public void addChild(Node child)
    {
        if(children==null){
           children=new ArrayList<Node>();
        }
        children.add(child);
    }

最新更新