2017-05-09 11 views
0

私のデータベースからデータを取得します。カスタムクラスDataClassに入れてから、mydataをノードのArrayListにフォーマットし、ここまではすべて問題ありません。次に、私は自分のデータをループして各ノードに子を追加したいと思います。子ノードをツリーノードに追加できません

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

それから私は、Nodeクラスを持っている:

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

だから私は法形式aを持っているしかし、私はので、私のクラスがどのように見える...

NullPointerExceptionエラーを抱えていますノードの配列anArrayへのDataClassオブジェクトのリスト:

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

そして、私はsuppo各ノードのすべての子を見つけるためにsedを:

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-月 - 2017年11:06:18.498 [SEVERE http-nio-8080-exec-211] null.null例外マッパーの失敗のために 例外がマップされませんでした。 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) 
+1

コードをデバッグしましたか? IDEで? – mtyurt

+0

[NullPointerExceptionとは何か、それを修正する方法は?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) ) – f1sh

+0

@mtyurt私はIntellijでエラーを表示していません... –

答えて

1

あなたはあなたの子供のインスタンスを開始したことがない、

そこに多くの修正がされているの一つは、あなたがこれにあなたの方法addChildを変更することができるということです。

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

     children.add(child); 
    } 
+0

ノードクラスの子プロパティを 'privateリスト children = null;'から 'privateリスト children = new ArrayList <>();'に変更する方が良いですか? –

+0

@GrechkaVassili私の個人的な意見は、クラスに子がない場合、子をnullにすることです。この方法では、作成されメモリに格納されるオブジェクトの数を減らすことができます。うまくいかないと言っているのではなく、ただの個人的な好みを気にしてください – nafas

関連する問題