0
DBからデータを取得するためにNode
にN回追加されたFirebase childEventListener
を使用しています。ChildEventListenerの削除
今、childEventListener
を削除しようとしていますが、動作していないようで、重複するデータがあります。
query = FirebaseDatabase.getInstance().getReference()
.child("chat")
.child("room-messages")
.child(roomID)
.orderByChild("timestamp")
.limitToLast(index);
paginationListener = query.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Log.d(TAG, dataSnapshot.getKey() + " - Single Value");
try {
Message message = dataSnapshot.getValue(Message.class);
message.setId(dataSnapshot.getKey());
EventBus.getDefault().post(new GetPaginatedMessage(message));
} catch (RuntimeException e) {
Log.d(TAG, "Type Cast Exception Caught");
}
}
と
if (query != null && paginationListener != null) {
query.removeEventListener(paginationListener);
}
のようにリスナーを削除することが動作するようには思えないし、私は重複データを取得します。 ヘルプが充実しています
'removeEventListener()を呼び出すと、その場所からリスナーが削除されます。すでに受信したデータの完了後、イベントの発生を停止します。それでもリスナーに電話がかかっている場合は、あなたが共有したコードから言うと残念ながら不可能なことが起こっています。 –
うん、https://groups.google.com/forum/#!topic/firebase-talk/qBPLgP35QPsは私がここでやっていることと密接に関連している!代替案の考え方は?私ももっとコードを共有することができます –
そのfirebaseトークスレッドJonnyは、「データがすでに受信された後に完了した」と同じことを話します。それ以上のデータを処理したくない場合は、リスナーを削除するときにbooleanフラグを設定し、処理前に 'onChildAdded'の値をチェックしてください。 –