У меня есть следующий код для загрузки в firestore:
Map<String, Object> map = new HashMap<>();
map.put(ConstHolder.PHONE_NUMBER_KEY, phone_number);
map.put(ConstHolder.STATE_KEY, state());
map.put(ConstHolder.PATH_KEY, cloudFilePath);
map.put(ConstHolder.DATE_KEY, date);
map.put(ConstHolder.CREATED_DATE_KEY, createdDate);
map.put(ConstHolder.HINT_KEY, textFromHints());
Пока что все поля карты - только String и int. Но теперь мне также нужно сохранить объект как байтовый массив, используя быструю сериализацию, поэтому я добавил:
FSTConfiguration conf = FSTConfiguration.createDefaultConfiguration();
byte placeByteArray[] = conf.asByteArray(place);
Log.w(TAG, "Place byte array : " + Arrays.toString(placeByteArray));
map.put(ConstHolder.PLACE_KEY, placeByteArray);
Я также пробовал:
FSTConfiguration conf = FSTConfiguration.createDefaultConfiguration();
byte placeByteArray[] = conf.asByteArray(place);
Log.w(TAG, "Place byte array : " + Arrays.toString(placeByteArray));
map.put(ConstHolder.PLACE_KEY, Arrays.asList(placeByteArray));
Но я продолжаю получать это исключение:
Caused by: java.lang.IllegalArgumentException: Invalid data. Arrays are not supported; use a List instead
at com.google.firebase.firestore.core.UserData$ParseContext.createError(com.google.firebase:firebase-firestore@@17.1.3:293)
at com.google.firebase.firestore.UserDataConverter.parseScalarValue(com.google.firebase:firebase-firestore@@17.1.3:403)
at com.google.firebase.firestore.UserDataConverter.parseData(com.google.firebase:firebase-firestore@@17.1.3:254)
at com.google.firebase.firestore.UserDataConverter.parseList(com.google.firebase:firebase-firestore@@17.1.3:287)
at com.google.firebase.firestore.UserDataConverter.parseData(com.google.firebase:firebase-firestore@@17.1.3:252)
at com.google.firebase.firestore.UserDataConverter.parseMap(com.google.firebase:firebase-firestore@@17.1.3:274)
at com.google.firebase.firestore.UserDataConverter.parseData(com.google.firebase:firebase-firestore@@17.1.3:230)
at com.google.firebase.firestore.UserDataConverter.parseSetData(com.google.firebase:firebase-firestore@@17.1.3:75)
at com.google.firebase.firestore.DocumentReference.set(com.google.firebase:firebase-firestore@@17.1.3:172)
at com.google.firebase.firestore.DocumentReference.set(com.google.firebase:firebase-firestore@@17.1.3:152)
at com.google.firebase.firestore.CollectionReference.add(com.google.firebase:firebase-firestore@@17.1.3:128)
at callcatcher.call.com.callcatcher.cloud.FirebaseFirestoreHelper.addCall(FirebaseFirestoreHelper.kt:15)
at callcatcher.call.com.callcatcher.activities.ActivityCallSaver.saveCallToFirebase(ActivityCallSaver.java:334)
at callcatcher.call.com.callcatcher.activities.ActivityCallSaver.onClick(ActivityCallSaver.java:251)
at java.lang.reflect.Method.invoke(Native Method)
at android.view.View$DeclaredOnClickListener.onClick(View.java:5379)
at android.view.View.performClick(View.java:6304)
at android.view.View$PerformClick.run(View.java:24803)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:171)
at android.app.ActivityThread.main(ActivityThread.java:6635)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
FirebaseFirestoreHelper.kt имеет следующий код для сохранения в Firestore:
fun addCall(callMap: Map<String, Any>) {
val db = FirebaseFirestore.getInstance()
db.collection(App.getFirebaseAuthHelper().getUserID()!!)
.add(callMap)
.addOnSuccessListener { documentReference -> Log.d(TAG, "DocumentSnapshot added with ID: " + documentReference.id) }
.addOnFailureListener { e -> Log.w(TAG, "Error adding document", e) }
}