2016-09-11 49 views
1

我在火力地堡以下數據庫結構: enter image description here火力地堡數據庫中獲取的特定級別的android兒童

在我的應用程序,當我啓動的活動。當活動開始時,我只想獲得所有level0Node的節點。這是我實現這樣的:

rootNode.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       Iterable<DataSnapshot> level0Nodes = dataSnapshot.getChildren(); 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) {} 
     }); 

但我面臨的問題是,如果在level1Node的發生任何更新,onDataChanged再次調用它,我不想。我怎樣才能做到這一點?

回答

2

您正在查找SingleValueListener

替換您ValueEventListener一個,代碼應該是這樣的:

rootNode.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      Iterable<DataSnapshot> level0Nodes = dataSnapshot.getChildren(); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) {} 
    }); 

欲瞭解更多信息請參考Official Docs

1

您是否在特定的參考變得一氣呵成總數據的兩種方法。

  1. rootNode.addValueEventListener(新ValueEventListener(){}

    //這個你正在使用,並根據此文件時觸發過的數據是在這個節點 - 根節點的變化。如果你想用它只有一次你可以通過調用

rootNode.removeEventListener()方法去除進一步更新移除聽者。

  • 使用rootNode.addListenerForSingleValueEvent(新ValueEventListener(){}
  • 根據文檔這只是觸發一次,所以當曾經出現在你的孩子這聽者中的變化不會觸發,你的問題將得到解決。

    加上我只是想建議你閱讀關於firebase的完整文檔,因爲你的問題是非常基本的。