首页 > 解决方案 > 如何将数组数据上传到 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) }

    }

标签: javaandroidfirebasekotlingoogle-cloud-firestore

解决方案


推荐阅读