我不确定这是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/