feat(firestore): fix Android Long/Double conversion #3004

This commit is contained in:
ehesp
2020-02-03 14:27:27 +00:00
parent 1c322a0dd1
commit 13a6560a40
2 changed files with 35 additions and 4 deletions

View File

@@ -19,13 +19,34 @@ package io.invertase.firebase.firestore;
import android.util.Base64;
import android.util.Log;
import com.facebook.react.bridge.*;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.ReadableMapKeySetIterator;
import com.facebook.react.bridge.WritableArray;
import com.facebook.react.bridge.WritableMap;
import com.google.common.collect.Iterables;
import com.google.firebase.Timestamp;
import com.google.firebase.firestore.*;
import com.google.firebase.firestore.Blob;
import com.google.firebase.firestore.DocumentChange;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.FieldPath;
import com.google.firebase.firestore.FieldValue;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.GeoPoint;
import com.google.firebase.firestore.MetadataChanges;
import com.google.firebase.firestore.QuerySnapshot;
import com.google.firebase.firestore.SnapshotMetadata;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import javax.annotation.Nullable;
import java.util.*;
import static io.invertase.firebase.common.RCTConvertFirebase.toHashMap;
@@ -426,7 +447,13 @@ class ReactNativeFirebaseFirestoreSerialize {
case INT_BOOLEAN_FALSE:
return false;
case INT_NUMBER:
return typeArray.getDouble(1);
// https://github.com/invertase/react-native-firebase/issues/3004
// Number values come from JS as Strings on Android so we can check for floating points
String numberStringValue = Objects.requireNonNull(typeArray.getString(1));
if (numberStringValue.contains(".")) {
return Double.valueOf(numberStringValue);
}
return Long.valueOf(numberStringValue, 10);
case INT_STRING:
return typeArray.getString(1);
case INT_STRING_EMPTY:

View File

@@ -16,6 +16,7 @@
*/
import {
isAndroid,
isArray,
isBoolean,
isDate,
@@ -120,6 +121,9 @@ export function generateNativeData(value) {
}
if (isNumber(value)) {
if (isAndroid) {
return getTypeMapInt('number', value.toString());
}
return getTypeMapInt('number', value);
}