[Android]Firebase 处理数据库 disconect

标签: Android
发布时间: 2016/10/10 20:06:31
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我不知道它的 disconect 或 DatabaseErrors 事件。首先我有 dialog 显示时开始加载数据上 Firebase ,然后我想解雇, dialog 两种情况下︰

  1. 有互联网︰ 加载数据成功和我删改过 dialog 在 onDataChange。

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

在第二种情况,我认为它是将调用 onCancelled,并在该方法中,我将解雇 dialog 。但在真实的它不是调用 onCancelled。

因此,如何我可以删改过 dialog 对第二种情况。这里是我的代码

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()当服务器将拒绝倾听者,通常当用户没有权限访问的数据时,将调用

你可能会想要防止附加listener,如果你没有连接到 Firebase 数据库。为此你可以.info/connected 和只增加一个listener时那是真的。

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