From c4f86883489db6689defd63cf6c2f79ae52a39c4 Mon Sep 17 00:00:00 2001 From: Chris Bianca Date: Wed, 10 May 2017 20:44:28 +0100 Subject: [PATCH] [android][database] Fix issue #100 --- .../java/io/invertase/firebase/Utils.java | 28 +++++++++++++++---- .../MainApplication.java | 2 +- .../tests/database/ref/issueSpecificTests.js | 2 +- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/android/src/main/java/io/invertase/firebase/Utils.java b/android/src/main/java/io/invertase/firebase/Utils.java index 424cbc3c..985f5c57 100644 --- a/android/src/main/java/io/invertase/firebase/Utils.java +++ b/android/src/main/java/io/invertase/firebase/Utils.java @@ -216,12 +216,12 @@ public class Utils { * @return */ private static boolean isArray(DataSnapshot snapshot) { - long expectedKey = 0; + long expectedKey = -1; for (DataSnapshot child : snapshot.getChildren()) { try { long key = Long.parseLong(child.getKey()); - if (key == expectedKey) { - expectedKey++; + if (key > expectedKey) { + expectedKey = key; } else { return false; } @@ -238,11 +238,11 @@ public class Utils { * @return */ private static boolean isArray(MutableData mutableData) { - long expectedKey = 0; + long expectedKey = -1; for (MutableData child : mutableData.getChildren()) { try { long key = Long.parseLong(child.getKey()); - if (key == expectedKey) { + if (key > expectedKey) { expectedKey++; } else { return false; @@ -261,8 +261,16 @@ public class Utils { * @return */ private static WritableArray buildArray(DataSnapshot snapshot) { + long expectedKey = 0; WritableArray array = Arguments.createArray(); for (DataSnapshot child : snapshot.getChildren()) { + long key = Long.parseLong(child.getKey()); + if (key > expectedKey) { + for (long i = expectedKey; i < key; i++) { + array.pushNull(); + } + expectedKey = key; + } Any castedChild = castValue(child); switch (castedChild.getClass().getName()) { case "java.lang.Boolean": @@ -288,6 +296,7 @@ public class Utils { Log.w(TAG, "Invalid type: " + castedChild.getClass().getName()); break; } + expectedKey++; } return array; } @@ -299,8 +308,16 @@ public class Utils { * @return */ private static WritableArray buildArray(MutableData mutableData) { + long expectedKey = 0; WritableArray array = Arguments.createArray(); for (MutableData child : mutableData.getChildren()) { + long key = Long.parseLong(child.getKey()); + if (key > expectedKey) { + for (long i = expectedKey; i < key; i++) { + array.pushNull(); + } + expectedKey = key; + } Any castedChild = castValue(child); switch (castedChild.getClass().getName()) { case "java.lang.Boolean": @@ -326,6 +343,7 @@ public class Utils { Log.w(TAG, "Invalid type: " + castedChild.getClass().getName()); break; } + expectedKey++; } return array; } diff --git a/tests/android/app/src/main/java/com/reactnativefirebasedemo/MainApplication.java b/tests/android/app/src/main/java/com/reactnativefirebasedemo/MainApplication.java index c6bc59dc..23030ecd 100644 --- a/tests/android/app/src/main/java/com/reactnativefirebasedemo/MainApplication.java +++ b/tests/android/app/src/main/java/com/reactnativefirebasedemo/MainApplication.java @@ -17,7 +17,7 @@ public class MainApplication extends Application implements ReactApplication { private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { @Override - protected boolean getUseDeveloperSupport() { + public boolean getUseDeveloperSupport() { return BuildConfig.DEBUG; } diff --git a/tests/src/tests/database/ref/issueSpecificTests.js b/tests/src/tests/database/ref/issueSpecificTests.js index 4396d083..b37c689d 100644 --- a/tests/src/tests/database/ref/issueSpecificTests.js +++ b/tests/src/tests/database/ref/issueSpecificTests.js @@ -14,7 +14,7 @@ function childTests({ fdescribe, it, context, firebase }) { // Assertion console.warn(JSON.stringify(snapshot.val())); - snapshot.val().should.eql(DatabaseContents.ISSUES[100]); + snapshot.val().should.eql([null, DatabaseContents.ISSUES[100][1], DatabaseContents.ISSUES[100][2], DatabaseContents.ISSUES[100][3]]); }); }); });