Firebase处理disconect到数据库 [英] Firebase Handling disconect to database
问题描述
-
有互联网:加载数据成功,并在onDataChange dissmiss对话框。
-
没有互联网连接或应用程序启动时快速关闭WiFi。在第二种情况下,我认为它会调用onCancelled,在这种方法中,我将关闭对话框。但实际上,这不是要求取消。
have internet: load data success, and I dissmiss dialog in onDataChange.
no internet connection or turn off wifi quickly when app start.
那么,如何在第二种情况下解除对话。这里是我的代码
pre $ private $ getCategory(){
mDatabase = FirebaseDatabase.getInstance()。getReference();
mDatabase.child(ReferenceToFirebase.CHILD_CATEGORIES)
.addListenerForSingleValueEvent(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){
// do something
//然后关闭对话框
mDialog.dismiss();
$ b @Override $ b $ public void onCancelled(DatabaseError databaseError){
mDialog.dismiss();
}
});
$ / code>
onCancelled()
在服务器拒绝侦听器时调用,通常当用户没有访问数据的权限时。
如果您没有与Firebase数据库的连接,可能需要阻止附加侦听器。为此,您可以收听。 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); $ b $如果(连接){
mDatabase.child(ReferenceToFirebase.CHILD_CATEGORIES)
.addListenerForSingleValueEvent(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){
//执行某些操作
//然后关闭对话框
mDialog.dismiss();
}
@Override
public void System.err.println(Listener was canceled);
mDialog.dismiss();
}
});
}其他{
System.out.println(未连接);
mDialog.dismiss( );
$ b @Override
public void onCancelled(DatabaseError error){
System.err.println(Listener was canceled);
}
});
I'm not sure it's disconect or DatabaseErrors event. First I have a dialog show when start loading data on Firebase, and then I want to dismiss that dialog in two case :
In second case, I think It's will call onCancelled, and in that method, I will dismiss dialog. But in real, it's not call onCancelled.
So, how I can dissmiss dialog on second case. Here's my code
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()
is called when the server rejects the listener, typically when the user doesn't have permission to access the data.
You'll probably want to prevent attaching the listener if you don't have a connection to the Firebase Database. For that you can listen to .info/connected
and only attach the listener when that is 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");
}
});
这篇关于Firebase处理disconect到数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!