2017-05-09 8 views
0

Ich erhalte Daten von meinem db legte es in eine benutzerdefinierte Klasse DataClass und dann formatiere ich mydata zu einer ArrayList von Knoten und bis hier ist alles in Ordnung. Dann möchte ich eine Schleife über meine Daten machen und die Kinder zu jedem Knoten hinzufügen. Aber ich habe ein NullPointerException Fehler ...Ich kann keine Kinder zum Baumknoten hinzufügen

So sieht meine Klasse wie:

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

Dann habe ich eine Node-Klasse haben:

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

So habe ich ein Verfahren, das Format ein Liste der Dataclass-Objekte in anArrayList der Knoten:

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

Und dann habe ich eine Methode, die ist suppo sed alle Kinder für jeden Knoten zu finden:

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

Aber wenn ich rufe return mainService.addNodeChildren(mainService.formatData(dbData)); vom Controller ich diesen Fehler mit bin:

09-May-2017 11: 06: 18,498 SCHWEREN [ http-nio-8080-exec-211] null.null Eine Ausnahme wurde aufgrund eines Exception-Mapper-Fehlers nicht zugeordnet. Die HTTP 500 Antwort wird erneut angezeigt.
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) 
+1

Haben Sie Ihren Code debuggt? Mit einer IDE? – mtyurt

+0

Mögliches Duplikat von [Was ist eine NullPointerException und wie behebe ich sie?] (Http://StackOverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) – f1sh

+0

@mtyurt Ich arbeite an Intellij, die keinen Fehler zeigt ... –

Antwort

1

Sie nie Ihre Kinder Instanz initiiert,

Es gibt viele Fehlerbehebungen von denen ist, dass Sie Ihre Methode addChild auf diese ändern können:

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

     children.add(child); 
    } 
+0

Ist es besser, die Kindereigenschaft in der Knotenklasse von 'private List children = null;' in 'private Liste children = new ArrayList <>();'? –

+0

@GrechkaVassili meine persönliche Meinung ist es, Kinder null zu halten, wenn die Klasse keine Kinder hat. Auf diese Weise verringern Sie die Anzahl der Objekte, die im Speicher erstellt und gespeichert werden. Bitte beachten Sie nur die persönlichen Vorlieben und sagen Sie nicht, dass Ihre Lösung falsch ist – nafas

Verwandte Themen