【问题标题】:Android (Firestore): Unable to add or update or set (SetOptions.merge) fields in already created document in FirestoreAndroid(Firestore):无法在 Firestore 中已创建的文档中添加、更新或设置(SetOptions.merge)字段
【发布时间】:2018-12-24 21:21:15
【问题描述】:

我正在尝试将新字段添加到 Firestore 数据库中“用户”集合下已创建的文档中。 从第一个活动开始,我将名称、描述和性别等基本信息添加到了 firestore 数据库 (collection("users").document(uid)) 中,并且它起作用了。但是,当我尝试将新字段(来自第二个活动)添加到同一个文档时,它不起作用。我尝试使用 set、SetOptions.merge、update,但没有任何效果。即使我尝试添加新集合,它也无法正常工作。有人可以帮我解决这个问题。提前致谢。 我的代码在这两项活动的下方。

第一个活动(BasicInfo.java)(工作)

    String uid = user.getUid();

    Map<String, Object> dataToSave = new HashMap<>();
    dataToSave.put(NAME, nameText);
    dataToSave.put(ABOUT, aboutText);
    dataToSave.put(GENDER, userGender);

    db.collection("users").document(uid).set(dataToSave).addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            if (task.isSuccessful()) {
                Intent userPreIntent = new Intent(BasicInfo.this, UserPre.class);
                startActivity(userPreIntent);
                finish();
            } else {
                Toast.makeText(getApplicationContext(), "There was some problem", Toast.LENGTH_SHORT).show();
            }
        }
    });

第二个活动(UserPre.java)(不工作)

    Map<String, Object> data = new HashMap<>();
    data.put(STYLE, styleBeauty);
    data.put(HUMOR, humor);
    data.put(FITNESS, fitness);
    data.put(TRAVEL, travel);
    data.put(PHOTOGRAPHY, photography);
    data.put(MUSIC, music);
    data.put(DANCE, dance);
    data.put(ART, art);
    data.put(FASHION, fashion);

    String uid = user.getUid();

    db.collection("user").document(uid).set(data).addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            if (task.isSuccessful()) {
                Toast.makeText(getApplicationContext(), "Data Added", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(getApplicationContext(), "There was some problem", Toast.LENGTH_SHORT).show();
            }
        }
    });

【问题讨论】:

  • STYLE, HUMOR, FITNESS 等等,字符串?您是否也尝试过使用db.collection("user").document(uid).set(data,SetOptions.merge()).addOnCompleteListener()?什么行为?
  • @AlexMamo 是的,这些是字符串,是的,我确实使用了 set(data, SetOptions.merge() 但通过更改数据库规则文件解决了问题。存在一些权限问题。现在它通过使用 set(data, SetOptions.merge().

标签: android firebase google-cloud-firestore


【解决方案1】:

你可以添加一个 FailureListener,它会告诉你 logcat 出了什么问题。

db.collection("user").document(uid).set(data).addOnCompleteListener(new OnCompleteListener<Void>() {
    @Override
    public void onComplete(@NonNull Task<Void> task) {
        if (task.isSuccessful()) {
            Toast.makeText(getApplicationContext(), "Data Added", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(getApplicationContext(), "There was some problem", Toast.LENGTH_SHORT).show();
        }
    }
})
.addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception e) {
        Log.w(TAG, "Error writing document", e);
    }
});

【讨论】:

  • 谢谢,存在权限问题。通过更改数据库中规则选项卡中的规则来解决。
  • 很高兴为您提供帮助,请接受答案以供将来参考。
猜你喜欢
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-22
相关资源
最近更新 更多