2016-04-14 15 views
0

Firebaseで初めてプロトタイプを作成したときに、SSEClient APIを使用してPythonを使用して、アップデートイベントをストリーミングしました。それは私の期待どおりに機能しました。私は文書全体に加入し、私はちょうど/ v_42/LASTUPDATE、その中に更新した場合、私のようなSSEイベントを取得したい場合: Firebase Java Event APIでSSE APIのようなイベントを返す方法を教えてください。

{ "event": "put", 
    "data" :{"path":"/v_42/lastUpdate","data":{"timestamp":9052758}}} 

は、Java APIを使用して、更新の特定のパスを取得する方法はあります?私は見つけることができる最も近いものは、トップレベルのキー(すなわち、「v_42」ではなく、変更の全体のパスを返します。

答えて

0

あなたは

firebase.addChildEventListener(new ChildEventListener() { 
    public void onChildChanged(DataSnapshot snapshot, String previousChildKey) { ... } 

です...しかしsnapshot.getKey() 。。

オン
snapshot.getRef().toString().substring(snapshot.getRef().getRoot().toString().length()) 

:「別のAPIを使用して、それは違っを公開しかし、同じ情報があることを行っている

たとえば、スナップショットのデータのパスを取得するために再他の手、あなたがしたい場合REST APIによって提供される情報であれば、JavaからREST APIを使用することもできます。

+0

ありがとうございました!しかし、私がそれを試してみると、 "/ v_42/lastUpdate"ではなく、 "/ v_42"しか返されません。 ReST APIを使用せずに後者を戻す方法はありますか? Java APIで変更されたツリーの実際の部分をどのように検出するのですか?余分な依存関係やオーバーヘッドが原因でなくても、ReSTを使用しないでください。 – RMHarris157

+0

これは、リスナーをどこに接続したかによって異なります。子リスナーを使用しているので、親ノードのレベルをまだ逃している可能性があります。しかし、同じREST APIを使用する予定がない場合は、他のロジックを変更するために実際に時間を費やす必要があります。パスを再構築する必要がある開発者がいるケースはほとんどありません。そうすることは可能ですが、いくつかのステップを取り戻すと、より良い解決策が得られることがよくあります([XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem )) –

+0

これは典型的なユースケースではないと確信しています。モバイルベースのUIで更新されるドキュメントモデルのコレクションをFirebaseで使用していますが、ダウンストリームインターフェイスのために変更のみを送信できます属性のモデル(副完成文書)をシリアルコマンドとして返します。 UIはFBへの単一の属性の更新を強制します。この属性は、ドキュメント内の更新された属性を取得し、下流のシステムに再直列化して送信することができます。 – RMHarris157

関連する問題