Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在Firebase Cloud Firestore中在文档中添加更多字段而不覆盖_Android_Firebase_Google Cloud Firestore - Fatal编程技术网

Android 在Firebase Cloud Firestore中在文档中添加更多字段而不覆盖

Android 在Firebase Cloud Firestore中在文档中添加更多字段而不覆盖,android,firebase,google-cloud-firestore,Android,Firebase,Google Cloud Firestore,我希望在firebase中添加字段而不覆盖它 正如您在下面看到的,我的应用程序的用户将筛选他们的情绪,并将情绪上传到firebase。 实际上,用户会被多次筛选,每次他们都会得到不同的情绪或相同的情绪 假设用户屏蔽了他们的脸,分别得到了快乐、悲伤和快乐 我希望firebase控制台中的字段如下所示: 情感:幸福 String Emotion = EmotionType.toString(); userID = fAuth.getCurrentUser().getUid(); FaceEmot

我希望在firebase中添加字段而不覆盖它

正如您在下面看到的,我的应用程序的用户将筛选他们的情绪,并将情绪上传到firebase。 实际上,用户会被多次筛选,每次他们都会得到不同的情绪或相同的情绪

假设用户屏蔽了他们的脸,分别得到了快乐、悲伤和快乐

我希望firebase控制台中的字段如下所示:

情感:幸福

String Emotion = EmotionType.toString();

userID = fAuth.getCurrentUser().getUid();
FaceEmotion = "FaceEmotion";

Map<String,Object> user = new HashMap<>();
    user.put("FaceEmotion",Emotion);

DocumentReference documentReference = fStore.collection("users").document(userID).collection("FaceEmotion").document(FaceEmotion);

documentReference.update("FaceEmotion",FieldValue.arrayUnion(user)).addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        Log.d(TAG, "onSuccess: Data has been saved "+ userID);
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.d(TAG, "onFailure: " + e.toString());
                    }
                });
表情:悲伤

情感:幸福

String Emotion = EmotionType.toString();

userID = fAuth.getCurrentUser().getUid();
FaceEmotion = "FaceEmotion";

Map<String,Object> user = new HashMap<>();
    user.put("FaceEmotion",Emotion);

DocumentReference documentReference = fStore.collection("users").document(userID).collection("FaceEmotion").document(FaceEmotion);

documentReference.update("FaceEmotion",FieldValue.arrayUnion(user)).addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        Log.d(TAG, "onSuccess: Data has been saved "+ userID);
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.d(TAG, "onFailure: " + e.toString());
                    }
                });
使用下面的代码,此时我只能用相同的情感值覆盖(FaceEmotion:),但不能像上面那样添加值。我尝试过使用数组,但我想问题在于字段名“FaceMootion”是相同的。 我有没有办法让Firestore为字段名“FaceMootion”生成autoID?比如说也许有这样的东西:

表情1:幸福

String Emotion = EmotionType.toString();

userID = fAuth.getCurrentUser().getUid();
FaceEmotion = "FaceEmotion";

Map<String,Object> user = new HashMap<>();
    user.put("FaceEmotion",Emotion);

DocumentReference documentReference = fStore.collection("users").document(userID).collection("FaceEmotion").document(FaceEmotion);

documentReference.update("FaceEmotion",FieldValue.arrayUnion(user)).addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        Log.d(TAG, "onSuccess: Data has been saved "+ userID);
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.d(TAG, "onFailure: " + e.toString());
                    }
                });
表情2:悲伤

表情3:幸福

String Emotion = EmotionType.toString();

userID = fAuth.getCurrentUser().getUid();
FaceEmotion = "FaceEmotion";

Map<String,Object> user = new HashMap<>();
    user.put("FaceEmotion",Emotion);

DocumentReference documentReference = fStore.collection("users").document(userID).collection("FaceEmotion").document(FaceEmotion);

documentReference.update("FaceEmotion",FieldValue.arrayUnion(user)).addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        Log.d(TAG, "onSuccess: Data has been saved "+ userID);
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.d(TAG, "onFailure: " + e.toString());
                    }
                });
String Emotion=EmotionType.toString();
userID=fAuth.getCurrentUser().getUid();
FaceEmotion=“FaceEmotion”;
Map user=newhashmap();
用户输入(“脸情感”,情感);
DocumentReference DocumentReference=fStore.collection(“用户”).document(userID).collection(“FaceEmotion”).document(FaceEmotion);
documentReference.update(“FaceMootion”,FieldValue.arrayUnion(用户)).addOnSuccessListener(新OnSuccessListener()){
@凌驾
成功时公开作废(作废避免){
Log.d(标记“onSuccess:数据已保存”+用户ID);
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
Log.d(标记“onFailure:+e.toString());
}
});

问题在于如何写入文档,解决方案是为每个新的表情创建一个新的文档,这样您就可以将情感添加到该集合中

使用此修改编写情感的代码如下所示:

String emotion = EmotionType.toString();

userID = fAuth.getCurrentUser().getUid();
faceEmotion = "FaceEmotion";

Map<String,Object> val = new HashMap<>();
    val.put("FaceEmotion",emotion);


DocumentReference documentReference = fStore.collection("users").document(userID).collection("FaceEmotion").document();

documentReference.set(val).addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        Log.d(TAG, "onSuccess: Data has been saved "+ userID);
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.d(TAG, "onFailure: " + e.toString());
                    }
                });

String emotion=EmotionType.toString();
userID=fAuth.getCurrentUser().getUid();
faceEmotion=“faceEmotion”;
Map val=新的HashMap();
val.put(“脸情感”,情感);
DocumentReference DocumentReference=fStore.collection(“users”).document(userID).collection(“FaceEmotion”).document();
documentReference.set(val).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公开作废(作废避免){
Log.d(标记“onSuccess:数据已保存”+用户ID);
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
Log.d(标记“onFailure:+e.toString());
}
});

请编辑问题,以更详细地描述您希望此代码的结果。您到底希望文档看起来像什么?“增加价值”是什么意思?现在更清楚了吗?但实际上,如果你读了我的帖子,你就会明白我希望结果看起来像@DougStevenson。一个文档不能有多个同名字段。请考虑使用数组类型字段来保存多个值,或者使用每个用户的多个文档。请让我了解如何做到这一点。如果你想帮我调整上面的代码,那会更有帮助。无论如何,谢谢你通知我不能有多个同名字段@请检查我上面编辑的帖子。我设法使用了数组,但当用户在多次尝试中始终获得相同的情绪时,数组不会更新。我想这是因为相同的域名。我能知道如何获得自动生成的字段名吗@史蒂文森