2016-09-06 60 views
1

我不确定它是disconect或DatabaseErrors事件。首先我有一个对话框显示时,在火力地堡开始加载数据,然后我要解雇该对话框中的两个案例:Firebase处理disconect到数据库

  1. 有互联网:加载数据成功,我在onDataChange dissmiss对话框。

  2. 没有互联网连接或在应用程序启动时快速关闭wifi。

在第二种情况下,我认为它会调用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"); 
    } 
});