私はAndroidベースのアプリケーション用のfirebaseデータベースを使用しています。 私がスコアを提出すると、メッセージ(フラグメントserverOK)があればそれがあります。 他のすべてのケースについては、メッセージを希望します。 databaseErorがnullではない場合、それがfirebaseに接続していない場合はどうすればよいですか?以下はAndroidチェックfirebase接続
は私のコードです:あなたは
私はAndroidベースのアプリケーション用のfirebaseデータベースを使用しています。 私がスコアを提出すると、メッセージ(フラグメントserverOK)があればそれがあります。 他のすべてのケースについては、メッセージを希望します。 databaseErorがnullではない場合、それがfirebaseに接続していない場合はどうすればよいですか?以下はAndroidチェックfirebase接続
は私のコードです:あなたは
Firebaseクライアントは接続の欠如をエラーとして処理しないため、完了リスナーをエラーで呼び出すことはありません。
Firebaseクライアントがバックエンドに接続されていないときにsetValue()
と呼ぶと、クライアントは書き込みをキューに保持します。接続が復元されると、サーバーに書き込みが送信されます。
完了ハンドラは、サーバーによって書き込みが実行された後でのみ呼び出されます。エラーが発生した場合(つまり、セキュリティルールが書き込みを拒否した場合)、コールバックにエラーが渡されます。
setValue()
を呼び出す前にクライアントがサーバーに接続されているかどうかを知りたい場合は、attach a listener to .info/connected
とすることができます。
に答えるため
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
}
});
は、ドキュメントを見てみましょう: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
と推測されますが、私はそれらについてはわかりません。あなたは自分でテストすることができます。もちろん、デバッグの目的でコードを印刷することもできます。
ありがとうございました!あなたの答えは本当に便利です! –
よろしくお願いします。私の答えが役に立つなら、その左側のupvoteボタンをクリックしてください。 ;-)あなたの質問に答えた場合は、チェックマークをクリックしてそれを受け入れます。そうすれば、他の人はあなたが(十分に)助けられたことを知ることができます。 –