2016-09-11 9 views
1

I 중포 기지에서 다음과 같은 데이터베이스 구조를 가지고 : 나는 활동을 시작할 때 enter image description here중포 기지 데이터베이스는 특정 수준의 아이들이 안드로이드 얻을

내 응용 프로그램에 있습니다. 활동이 시작될 때 한 번만 모든 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를에 변화가있을 때 어느 트리거 설명서에 따라하는이. 당신이 경우 당신이 추가 업데이트를 제거

rootNode.removeEventListener() 메서드를 호출하여 리스너를 제거 할 수 있습니다 번만 사용하고 싶습니다.

을 지금 당신의 아이이 청취자의 변화가있을 때 설명서에 따라
  • 사용 rootNode.addListenerForSingleValueEvent
      을 (새 ValueEventListener() {}

    이 한 번만 그렇게 트리거 방아쇠를 당기지 않으면 문제가 해결됩니다.

    더하기 귀하의 질문이 매우 기본적이므로 firebase에 대한 전체 설명서를 읽으라고 제안하고 싶습니다.