2016-09-06 1 views
1

disconect 또는 DatabaseErrors 이벤트가 확실하지 않습니다. 먼저 나는 때 대화 쇼 중포 기지에 시작 데이터를로드를 한 다음 나는 두 경우에 그 대화 상자를 닫하려면 : 데이터를로드 성공, 나는 onDataChange 대화를 dissmiss :Firebase 데이터베이스에 대한 disconect 처리 중

  1. 인터넷이있다.

  2. 인터넷이 연결되어 있지 않거나 앱을 시작할 때 Wi-Fi를 빨리 끕니다.

두 번째 경우에는 OnCancelled가 호출되며,이 방법에서는 대화를 닫습니다. 그러나 실제로, 그것은 취소 요구가 아닙니다.

그래서 두 번째 경우에 대화를 무시할 수 있습니다. 서버가 리스너를 거부 할 때 여기에 사용자가 데이터에 액세스 할 수있는 권한이 없습니다 일반적으로 할 때,

private void getCategory() { 
    mDatabase = FirebaseDatabase.getInstance().getReference(); 
    mDatabase.child(ReferenceToFirebase.CHILD_CATEGORIES) 
      .addListenerForSingleValueEvent(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        //do something 

        //then dismiss dialog 
        mDialog.dismiss(); 
       } 

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

답변

1

onCancelled()가 호출 내 코드입니다.

Firebase 데이터베이스에 연결되어 있지 않은 경우에는 수신기를 연결하지 않는 것이 좋습니다. 이를 위해서는 listen to .info/connected을 사용할 수 있으며, 해당되는 경우에만 리스너를 연결하십시오.

mDatabase = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference connectedRef = mDatabase.child(".info/connected"); 
connectedRef.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
    boolean connected = snapshot.getValue(Boolean.class); 
    if (connected) { 
     mDatabase.child(ReferenceToFirebase.CHILD_CATEGORIES) 
      .addListenerForSingleValueEvent(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        //do something 

        //then dismiss dialog 
        mDialog.dismiss(); 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 
        System.err.println("Listener was cancelled"); 
        mDialog.dismiss(); 
       } 
     }); 
    } else { 
     System.out.println("not connected"); 
     mDialog.dismiss(); 
    } 
    } 

    @Override 
    public void onCancelled(DatabaseError error) { 
    System.err.println("Listener was cancelled"); 
    } 
}); 
관련 문제