我不确定这是Disonect还是DatabaseErrors事件。首先,当我开始在Firebase上加载数据时,出现一个对话框,然后在两种情况下关闭该对话框:


有互联网:成功加载数据,我关闭onDataChange中的对话框。
没有互联网连接或在应用启动时快速关闭wifi。


在第二种情况下,我认为它将调用onCancelled,并且在该方法中,我将关闭对话框。但实际上,它不是调用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();
                }
            });
}

最佳答案

当服务器拒绝侦听器时,通常在用户无权访问数据时调用onCancelled()

如果您没有与Firebase数据库的连接,则可能要阻止附加侦听器。为此,您可以listen to .info/connected并且仅在为true时才附加侦听器。

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");
  }
});

关于android - Firebase处理断开与数据库的连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39358744/

10-12 00:32
查看更多