2016-06-15 27 views
14

私のアプリでは、Firebaseをデータベースとして使用しています。特定の場所の子ノードの変更をリスンしているときに、インターネットに接続していない場合は、コールバックが実行されません。 firebaseコールはちょうど立ち往生する。Firebaseがインターネット接続に接続されない

私は永続性が有効になっている、だから、

FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance(); 
firebaseDatabase.setPersistenceEnabled(true); 

これを使用しています。この問題は、1つのシナリオでのみ発生します。 Firebaseのローカル永続性に関するデータがなく、インターネット接続も利用できない場合。私はこれを使用しています

addListenerForSingleValueEvent(new ValueEventListener() { 
         @Override 
         public void onDataChange(DataSnapshot dataSnapshot) { 

         } 

         @Override 
         public void onCancelled(DatabaseError databaseError) { 
          Timber.d("Cancelled"); 
         } 
        }); 

私は、その特定のシナリオのための2つのコールバックのいずれかを取得しておりません。

このようなシナリオに取り組むにはどうすればよいですか? - サーバー側のエラーが発生した場合に

onCancelled

+0

私は実際に今この同じ問題を経験しています。あなたはそれを解決するために何かしましたか?もしそうでなければ、私はREST APIに頼らなければならないかもしれません。 – Rafi

+0

FirebaseにはどのSDKバージョンを使用していますか? –

+1

私はこの回答から得た情報を使って問題を解決しました:http://stackoverflow.com/questions/39021378/android-firebase-ondatachange-and-oncancelled-not-being-called-with-no-int/39021671#39021671 – Rafi

答えて

5

はのは、何も接続がない場合、それらのメソッドがトリガーされた方法を見てみましょう。たとえば、ユーザーが指定されたノードにアクセスできない場合などです。 (またはSparkleプランの接続制限に達したとき)。

onDataChange - データが残っている場合、このデータが読み込まれます。そうでない場合、このメソッドはトリガされません(あなたのケース)。

Firebase Documentationによると、デバイスがFirebase Serverに接続されているかどうかを確認する場合は、リスナーを.info/connectedに追加できます。このように:

DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected"); 
connectedRef.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
    boolean connected = snapshot.getValue(Boolean.class); 
    if (connected) { 
     Toast.makeText(this, "Connected", Toask.LENGTH_SHORT); 
    } else { 
     Toast.makeText(this, "Not connected", Toask.LENGTH_SHORT).show(); 
    } 
    } 

    @Override 
    public void onCancelled(DatabaseError error) { 
    } 
}); 
+1

私は接続の状態を確認するために、このリファレンス '.info/connected'を取得する必要があることがわかっていたのでしょうか。 – Herry

+0

私は答えにFirebaseのドキュメントのリンクを追加しました。 @Herry –

+0

'connected'は、インターネットが利用可能であってもfalseです。 – Shruti

関連する問題