2017-05-14 13 views
0

私はアンドロイドアプリでfirebaseリアルタイムデータベースを使用しています。私はデータベースに挿入された最後のエントリのみを必要とし、データベース全体ではありませんsync.Iは以下を実行しています。ここでファイアベースリアルタイムデータベースに関する問い合わせ

FirebaseDatabase.getInstance().getReference("reference").limitToLast(1).addValueEventListener(this); 

は、私ははっきりと理解できないものだ:

1.When私はlimitToLastを行うとリスナーを追加し、それがローカルコピーに、データベースから全データをダウンロードし、私のスナップショットを渡すん最後のエントリか、それとも最後のエントリだけをダウンロードしますか?

2.リスナーを削除すると、リアルタイムデータベースとローカルデータ間の同期が停止するか同期が継続しますが、onDataChangeは呼び出されませんか?

3.値イベントリスナーを削除してオフラインにするまでの違い。

答えて

0

limitToLast()に電話すると、Firebaseデータベースクエリを作成します。このようなクエリは一致するデータだけを同期させるため、例では最後のアイテムをダウンロードしてonDataChangeを呼び出します。その後、誰かが新しい項目を追加すると、新しい最後の項目でonDataChangeが再び呼び出されます。

リスナーを削除すると、データの同期が停止します。

goOnline()に電話するまで、オフラインになるとデータ同期が一時的に停止します。

+0

私のFirebaseコンソールのUsageタブには、期間中にアクティブなリスナーがいなくても、1時間に2MBをダウンロードしていることが示されています。なぜこれが起こっているのでしょうか? –

+0

このような限られた情報からは言い難いです。しかし、Chromeデベロッパーツールの[ネットワーク]タブを確認すると、WS(ウェブソケット用)パネルで正確なトラフィックを確認できます。クエリに一致するデータよりも多くのデータをダウンロードしている場合は、[データにインデックスを付ける](https://firebase.google.com/docs/database/security/indexing-data)を忘れている可能性があります。また、その場合はJavaScriptコンソールに警告が表示されます。 –

+0

私はインデックスにデータを置いていませんが、なぜデータが必要以上にダウンロードされるのでしょうか? –

関連する問題