2016-09-06 10 views
1

disconectまたはDatabaseErrorsイベントが不安です。最初に私は時にダイアログを表示Firebaseのスタートデータのロードを持って、その後、私は2つの場合には、そのダイアログを閉じたい:負荷データの成功、と私はOnDataChangeのダイアログをdissmiss:Firebaseデータベースへの障害の処理

  1. は、インターネットを持っています。

  2. インターネットに接続していないか、アプリの起動時に無線LANをすばやくオフにします。

2番目のケースでは、私はそれがonCancelledを呼び出すと思うし、その方法では、私はダイアログを閉じます。しかし、実際には、それは無効にする必要はありません。

したがって、どのようにして2番目のケースでダイアログを消すことができますか。ユーザーがデータにアクセスする権限を持っていない場合、サーバーは、通常、リスナーを拒否したときにここに私のコード

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