2017-08-19 12 views
0

私はAndroidベースのアプリケーション用のfirebaseデータベースを使用しています。 私がスコアを提出すると、メッセージ(フラグメントserverOK)があればそれがあります。 他のすべてのケースについては、メッセージを希望します。 databaseErorがnullではない場合、それがfirebaseに接続していない場合はどうすればよいですか?以下はAndroidチェックfirebase接続

は私のコードです:あなたは

答えて

3

Firebaseクライアントは接続の欠如をエラーとして処理しないため、完了リスナーをエラーで呼び出すことはありません。

Firebaseクライアントがバックエンドに接続されていないときにsetValue()と呼ぶと、クライアントは書き込みをキューに保持します。接続が復元されると、サーバーに書き込みが送信されます。

完了ハンドラは、サーバーによって書き込みが実行された後でのみ呼び出されます。エラーが発生した場合(つまり、セキュリティルールが書き込みを拒否した場合)、コールバックにエラーが渡されます。

setValue()を呼び出す前にクライアントがサーバーに接続されているかどうかを知りたい場合は、attach a listener to .info/connectedとすることができます。

+0

ありがとうございました!あなたの答えは本当に便利です! –

+0

よろしくお願いします。私の答えが役に立つなら、その左側のupvoteボタンをクリックしてください。 ;-)あなたの質問に答えた場合は、チェックマークをクリックしてそれを受け入れます。そうすれば、他の人はあなたが(十分に)助けられたことを知ることができます。 –

2

に答えるため

ref.setValue(resultat, new DatabaseReference.CompletionListener() { 
    @Override 
    public void onComplete(DatabaseError databaseError, DatabaseReference dataRef) { 
     if (databaseError == null) { 
      FragmentManager fm3 = getFragmentManager(); 
      ServerOk serverok = new ServerOk(); 
      serverok.show(fm3, "serverok"); 
     } else { 
      FragmentManager fm3 = getFragmentManager(); 
      Server server = new Server(); 
      server.show(fm3, "server"); 
     } 
    } 
}); 

はありがとう、あなたはonFailureListnerを追加してみましたか?

ref.setValue(resultat, new DatabaseReference.CompletionListener() { 
    @Override 
    public void onComplete(DatabaseError databaseError, DatabaseReference dataRef) { 
     if (databaseError == null) { 
      FragmentManager fm3 = getFragmentManager(); 
      ServerOk serverok = new ServerOk(); 
      serverok.show(fm3, "serverok"); 
     } else { 
      FragmentManager fm3 = getFragmentManager(); 
      Server server = new Server(); 
      server.show(fm3, "server"); 
     } 
    } 
}) 
.addOnFailureListener(new OnFailureListener() { 
      @Override 
      public void onFailure(@NonNull Exception e) { 
       e.printStackTrace(); 
      // did not set value 
      } 
     }); 
1

は、ドキュメントを見てみましょう:https://firebase.google.com/docs/reference/android/com/google/firebase/database/DatabaseError

あなたはdatabaseError.getCode()と、エラーの種類を確認し、そこに列挙されたものに対してそれをテストすることができます。デバッグの場合は、databaseError.getMessage()またはdatabaseError.getDetails()を使用して情報を取得することもできます。 StackTraceとしてdatabaseError.toException().printStackTrace()と印刷することもできます。

あなたの場合は、databaseError.getCode() == DatabaseError.DISCONNECTEDまたはdatabaseError.getCode() == DatabaseError.NETWORK_ERRORと推測されますが、私はそれらについてはわかりません。あなたは自分でテストすることができます。もちろん、デバッグの目的でコードを印刷することもできます。

関連する問題