2015-09-22 7 views
5

私たちのアプリのチャットコンポーネントにAndroid用Firebaseを使用しています。 各チャットメッセージにステータス更新を確実に実装する方法を理解できません。 たとえば、チャットがサーバーと同期されているときに「送信中」と表示され、同期後に成功のフィードバックが表示されます。Firebase Android - ノードが同期されているかどうかを確認する方法

私はアダプタにメッセージを供給するonChildAddedリスナを持っています。しかし、このリスナーは、各ノードがローカルに追加された直後に起動され、各ノードの状態を確認することはできません。

私の現在の解決策は、ノード・キーのセットを保持し、 。次に、setValueコールバックで、ノードキーをセットから削除します。ただし、呼び出し元のアクティビティが破棄されたときにノードを同期できるため、これは非常に信頼できません。

各ノードがサーバーに同期されているかどうかを確認する簡単な方法があるかどうかは疑問です。

ありがとうございます! Firebase documentation on writing dataから

+1

私は以下の答えが、次回は、あなたの質問に、問題を再現する最小限のコードを追加してください。コードは、コードの説明よりも解析が簡単です。 –

答えて

6

:あなたはあなたのデータがコミットされたときに知りたい場合は

、あなたは完了リスナーを追加することができます。 setValue()およびupdateChildren()は、書き込みがデータベースにコミットされたときに呼び出されるオプションの完了リスナーを使用します。この便利なコードサンプルでは

ref.setValue("I'm writing data", new Firebase.CompletionListener() { 
    @Override 
    public void onComplete(FirebaseError firebaseError, Firebase firebase) { 
     if (firebaseError != null) { 
      System.out.println("Data could not be saved. " + firebaseError.getMessage()); 
     } else { 
      System.out.println("Data saved successfully."); 
     } 
    } 
}); 
+1

はい、これは現在私が使用している方法です。しかし、ネットワークがない場合、このリスナーはまったく呼び出されません。なぜなら、ネットワークがオンになったときにデータが書き込まれるようにキューに入れられているからです。その間、このコールバックを含むアクティビティは破棄されます。次に、ネットワークをオンにして、書き込みが完了します。それから私は活動に戻ります。この時点でデータは同期されますが、コールバックは決して実行されません。 – recipherus

+0

明確にするため、ユーザーがアクティビティを終了している間にデータがバックグラウンドで同期されます。そのため、このコールバックは決して受信されません。 – recipherus

+1

アプリケーションの同じセッションでは、通常、リスナーはまだ周囲にあり、呼び出されます。ディスク永続性を使用してアプリケーションを再起動すると、リスナーは実際に再起動しても生き残ることができません。 –

関連する問題