Skip to content

Commit 1c31e16

Browse files
committed
Fix bug where custom snapshot parser was not applied in FirebaseArrayOfObjects.java if FirebaseArray.java already had data
Signed-off-by: Alex Saveau <[email protected]>
1 parent 8507e21 commit 1c31e16

File tree

1 file changed

+27
-18
lines changed

1 file changed

+27
-18
lines changed

database/src/main/java/com/firebase/ui/database/FirebaseArrayOfObjects.java

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -23,28 +23,26 @@ public class FirebaseArrayOfObjects<E> extends ImmutableList<E> {
2323
* @param snapshots a list of {@link DataSnapshot}s to be converted to a model type
2424
* @param modelClass the model representation of a {@link DataSnapshot}
2525
*/
26-
protected FirebaseArrayOfObjects(List<DataSnapshot> snapshots, Class<E> modelClass) {
26+
protected FirebaseArrayOfObjects(List<DataSnapshot> snapshots,
27+
Class<E> modelClass,
28+
SnapshotParser<E> parser) {
2729
mSnapshots = snapshots;
2830
mEClass = modelClass;
29-
mParser = new SnapshotParser<E>() {
30-
@Override
31-
public E parseSnapshot(DataSnapshot snapshot) {
32-
return snapshot.getValue(mEClass);
33-
}
34-
};
31+
mParser = parser;
3532
}
3633

3734
/**
3835
* @param snapshots a list of {@link DataSnapshot}s to be converted to a model type
3936
* @param modelClass the model representation of a {@link DataSnapshot}
4037
*/
4138
public static <T> FirebaseArrayOfObjects<T> newInstance(List<DataSnapshot> snapshots,
42-
Class<T> modelClass) {
43-
if (snapshots instanceof FirebaseArray) {
44-
return new FirebaseArrayOfObjectsOptimized<>((FirebaseArray) snapshots, modelClass);
45-
} else {
46-
return new FirebaseArrayOfObjects<>(snapshots, modelClass);
47-
}
39+
final Class<T> modelClass) {
40+
return getArray(snapshots, modelClass, new SnapshotParser<T>() {
41+
@Override
42+
public T parseSnapshot(DataSnapshot snapshot) {
43+
return snapshot.getValue(modelClass);
44+
}
45+
});
4846
}
4947

5048
/**
@@ -55,9 +53,18 @@ public static <T> FirebaseArrayOfObjects<T> newInstance(List<DataSnapshot> snaps
5553
public static <T> FirebaseArrayOfObjects<T> newInstance(List<DataSnapshot> snapshots,
5654
Class<T> modelClass,
5755
SnapshotParser<T> parser) {
58-
FirebaseArrayOfObjects<T> array = newInstance(snapshots, modelClass);
59-
array.mParser = parser;
60-
return array;
56+
return getArray(snapshots, modelClass, parser);
57+
}
58+
59+
private static <T> FirebaseArrayOfObjects<T> getArray(List<DataSnapshot> snapshots,
60+
Class<T> modelClass,
61+
SnapshotParser<T> parser) {
62+
if (snapshots instanceof FirebaseArray) {
63+
return new FirebaseArrayOfObjectsOptimized<>(
64+
(FirebaseArray) snapshots, modelClass, parser);
65+
} else {
66+
return new FirebaseArrayOfObjects<>(snapshots, modelClass, parser);
67+
}
6168
}
6269

6370
public List<DataSnapshot> getSnapshots() {
@@ -173,8 +180,10 @@ protected static class FirebaseArrayOfObjectsOptimized<E> extends FirebaseArrayO
173180
implements ChangeEventListener {
174181
protected List<E> mObjects = new ArrayList<>();
175182

176-
public FirebaseArrayOfObjectsOptimized(FirebaseArray snapshots, Class<E> modelClass) {
177-
super(snapshots, modelClass);
183+
public FirebaseArrayOfObjectsOptimized(FirebaseArray snapshots,
184+
Class<E> modelClass,
185+
SnapshotParser<E> parser) {
186+
super(snapshots, modelClass, parser);
178187
snapshots.addChangeEventListener(this);
179188
}
180189

0 commit comments

Comments
 (0)