2016-10-10 1 views
7

노드 아래에 Order 노드와 Status 키가 있습니다. Status의 값이 바뀌 었습니다. 변화가 감지되면 read 부모 Order 노드가 있습니다.하위 노드 값의 변경을 감지하면 상위 개체에 액세스

요점은 Order 노드의 변경 사항을 듣고 싶지 않다는 것입니다. 그러나 Order 노드 아래의 Status입니다. 가장 적합한 방법은 무엇입니까? 다른 청취자에게 청취자를 배치하는 것이 좋습니까?

final Query qRef = FirebaseDatabase.getInstance().getReference().child("orders").orderByChild("customerId").equalTo(FirebaseAuth.getInstance().getCurrentUser().getUid()) 
      .limitToFirst(1); 
    qRef.keepSynced(true); 

    final DatabaseReference reference = qRef.getRef().child("status"); 


    reference.addValueEventListener(new ValueEventListener() { 

     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 


      DatabaseReference inner = reference.getParent(); 

      inner.addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot parent) { 
        if (parent != null) { 
         Order newOrder = parent.getValue(Order.class); 
         if (newOrder != null) { 
          if (newOrder.getStatus() != null && !newOrder.getStatus().equals("FX_OVER")) 
           processOrder(newOrder); 
         } 
        } 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
      }); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 

    }); 

그리고 JSON :

{ "20161010210955" : { 
    "createdAt" : { 
     "date" : 10, 
     "day" : 1, 
     "hours" : 21, 
     "minutes" : 9, 
     "month" : 9, 
     "seconds" : 55, 
     "time" : 1476113995244, 
     "timezoneOffset" : -330, 
     "year" : 116 
    }, 
    "customerId" : "npsd3Ldfsdf1x0hsdfsdf2mj14VUA876f2", 
    "id" : "20161010210955", 
    "status" : "FX_FULL" 

    } } 
+0

코드 작동에 문제가있는 경우 [문제를 재현하는 최소 코드] (http://stackoverflow.com/help/mcve)를 표시하십시오. 이 경우 작은 JSON 스 니펫 (텍스트로, 스크린 샷 없음)도 도움이됩니다. –

+0

감사합니다. 질문에 내 코드를 추가했습니다. @ FrankvanPuffelen – Vinod

답변

2

왜 처음 상태를 확인하지 않습니다 여기 내 코드입니까? 처음에는 상태의 가치를 알 수 있습니다. 나는이 해결책이 최적의 방법이라고 생각한다.

+0

질문을 게시 한 후 귀하의 답변과 비슷한 해결책을 사용하여 끝 냈습니다. 감사! – Vinod

관련 문제