2017-11-29 5 views
0

호출되지 않습니다 :ValueEventListeners는 다음과 같이 내 중포 기지 데이터베이스에서 특정 값을 얻으려고

databaseReference.child("update/version").addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     final Long version = (Long) dataSnapshot.getValue(); 

     if (version != null) firebaseVersion = version.intValue(); 

     needsUpdate = storedVersion != firebaseVersion; 

     ... 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 

는 수신기의 내부 코드는 호출되지 않습니다. 첫 번째 줄에 중단 점이있는 디버그 모드로 실행했는데 아무 일도 일어나지 않습니다. 이전에는 이것이 문제가되지 않았지만 이제는 valueEventListener를 사용하지 않습니다. 내가 .addValueEventListener로 전환 시도하고 데이터베이스에서 변경하지만 여전히 동일한 결과를 얻을.

왜 내 청취자가 호출되지 않습니까?

답변

0

onCancelled 콜백이 호출 되나요? 그렇다면 DatabaseError를 기록하십시오.

또한 사용자가 FirebaseAuth를 통해 로그인 했습니까? 이것은 데이터베이스에서 읽는 데 필요한 요구 사항입니다.

+0

onCancelled도 실행되지 않습니다. 리스너는 사용자가 로그인 한 경우에만 추가되고, 그렇지 않으면 코드를 전달합니다. –

0

두 가지 방법에서 큰 차이가 있습니다. 한 메소드를 다른 메소드로 변경하거나 동일한 동작을 기대할 수는 없습니다. 쿼리를 듣거나 데이터베이스가 연결되어 참조

  1. addValueEventListener()하십시오.
  2. addListenerForSingleValueEvent()은 즉시 onDataChange() 메서드를 실행하고 해당 메서드를 실행 한 후 첨부 된 참조 위치에서 청취를 중지합니다.

그러나이 onDataChange() 방법은 특정 위치에있는 데이터의 스냅 샷을 할 때마다 데이터의 변화라고 기억. 변경 사항이 없으면 onDataChange() 메소드가 트리거되지 않습니다.

+0

'addListenerForSingleValueEvent()'는 액티브 변경이 있든 상관없이 데이터의 현재 상태를 가져옵니다. 'addValueEventListener()'를 시도한 이유는 아이템에 장기간의 리스너가 있었고, 트리거하려고 시도하기 위해 적극적으로 변경하려고했기 때문입니다. –

+0

'addListenerForSingleValueEvent()'를 사용하고 있다면, 한번도 트리거되지 않습니다. –

+0

맞습니다. –

관련 문제