java - 如何将数组数据上传到 Cloud Firestore
问题描述
我有以下代码用于上传到 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) }
}
解决方案
推荐阅读
- javascript - 使用递归计算回文数
- java - 如何将一个 double 舍入为一个整体 # 同时仍将其保留为 Double (包装类)?
- reactjs - 如何在反应js中检查响应状态并相应地显示内容消息
- python - 如何在 Python 中获取特定参数的 HTTP 响应(在 curl POST 之后)
- nestjs - Nestjs 测试 e2e ECONNREFUSED 127.0.0.1:80
- spring-boot - Spring Boot Cloud + Hashi Consul + Connect Proxy:如何为配置配置引导程序?
- flutter - 即使您将抽屉滑开,您如何正确地保留您在 TextField 中键入的内容或在抽屉的下拉菜单中选择的内容?
- c# - 在可枚举相等时返回 false 的记录
- javascript - fs writeFile 在完成写入文件之前冻结
- typescript - 保证“接口”的未来属性不会具有特定类型的值