From 89b17bd8780aa9c1aa509a99ab53cc9a3d01470b Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Tue, 14 Mar 2017 09:49:26 -0700 Subject: [PATCH 1/2] Cleanup Signed-off-by: Alex Saveau (cherry picked from commit 371c211) Signed-off-by: Alex Saveau --- .../ui/database/FirebaseIndexArray.java | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/database/src/main/java/com/firebase/ui/database/FirebaseIndexArray.java b/database/src/main/java/com/firebase/ui/database/FirebaseIndexArray.java index e7b700cf2..01910766f 100644 --- a/database/src/main/java/com/firebase/ui/database/FirebaseIndexArray.java +++ b/database/src/main/java/com/firebase/ui/database/FirebaseIndexArray.java @@ -33,7 +33,7 @@ public class FirebaseIndexArray extends CachingObservableSnapshotArray imp private static final String TAG = "FirebaseIndexArray"; private DatabaseReference mDataRef; - private Map mRefs = new HashMap<>(); + private Map mRefs = new HashMap<>(); private FirebaseArray mKeySnapshots; private List mDataSnapshots = new ArrayList<>(); @@ -109,8 +109,8 @@ public void onCancelled(DatabaseError error) { public void removeChangeEventListener(@NonNull ChangeEventListener listener) { super.removeChangeEventListener(listener); if (!isListening()) { - for (Query query : mRefs.keySet()) { - query.removeEventListener(mRefs.get(query)); + for (DatabaseReference ref : mRefs.keySet()) { + ref.removeEventListener(mRefs.get(ref)); } clearData(); @@ -150,7 +150,7 @@ private boolean isKeyAtIndex(String key, int index) { } protected void onKeyAdded(DataSnapshot data) { - Query ref = mDataRef.child(data.getKey()); + DatabaseReference ref = mDataRef.child(data.getKey()); // Start listening mRefs.put(ref, ref.addValueEventListener(new DataRefListener())); @@ -162,10 +162,7 @@ protected void onKeyMoved(DataSnapshot data, int index, int oldIndex) { if (isKeyAtIndex(key, oldIndex)) { DataSnapshot snapshot = removeData(oldIndex); mDataSnapshots.add(index, snapshot); - notifyChangeEventListeners(ChangeEventListener.EventType.MOVED, - snapshot, - index, - oldIndex); + notifyChangeEventListeners(EventType.MOVED, snapshot, index, oldIndex); } } @@ -175,7 +172,7 @@ protected void onKeyRemoved(DataSnapshot data, int index) { if (isKeyAtIndex(key, index)) { DataSnapshot snapshot = removeData(index); - notifyChangeEventListeners(ChangeEventListener.EventType.REMOVED, snapshot, index); + notifyChangeEventListeners(EventType.REMOVED, snapshot, index); } } @@ -217,20 +214,20 @@ public void onDataChange(DataSnapshot snapshot) { int index = getIndexForKey(key); if (snapshot.getValue() != null) { - if (!isKeyAtIndex(key, index)) { - // We don't already know about this data, add it - mDataSnapshots.add(index, snapshot); - notifyChangeEventListeners(ChangeEventListener.EventType.ADDED, snapshot, index); - } else { + if (isKeyAtIndex(key, index)) { // We already know about this data, just update it updateData(index, snapshot); - notifyChangeEventListeners(ChangeEventListener.EventType.CHANGED, snapshot, index); + notifyChangeEventListeners(EventType.CHANGED, snapshot, index); + } else { + // We don't already know about this data, add it + mDataSnapshots.add(index, snapshot); + notifyChangeEventListeners(EventType.ADDED, snapshot, index); } } else { if (isKeyAtIndex(key, index)) { // This data has disappeared, remove it removeData(index); - notifyChangeEventListeners(ChangeEventListener.EventType.REMOVED, snapshot, index); + notifyChangeEventListeners(EventType.REMOVED, snapshot, index); } else { // Data does not exist Log.w(TAG, "Key not found at ref: " + snapshot.getRef()); From ebe3475a7c8072ee7538df6ba1e30568fb73494b Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Tue, 14 Mar 2017 10:34:31 -0700 Subject: [PATCH 2/2] Add null check for removing listeners Signed-off-by: Alex Saveau --- .../main/java/com/firebase/ui/database/FirebaseIndexArray.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/database/src/main/java/com/firebase/ui/database/FirebaseIndexArray.java b/database/src/main/java/com/firebase/ui/database/FirebaseIndexArray.java index 01910766f..cc5fcdfac 100644 --- a/database/src/main/java/com/firebase/ui/database/FirebaseIndexArray.java +++ b/database/src/main/java/com/firebase/ui/database/FirebaseIndexArray.java @@ -168,7 +168,8 @@ protected void onKeyMoved(DataSnapshot data, int index, int oldIndex) { protected void onKeyRemoved(DataSnapshot data, int index) { String key = data.getKey(); - mDataRef.child(key).removeEventListener(mRefs.remove(mDataRef.getRef().child(key))); + ValueEventListener listener = mRefs.remove(mDataRef.getRef().child(key)); + if (listener != null) mDataRef.child(key).removeEventListener(listener); if (isKeyAtIndex(key, index)) { DataSnapshot snapshot = removeData(index);