查询Firestore数据并将一个字段添加到与查询匹配的所有文档中

时间:2018-10-18 18:43:39

标签: java android firebase google-cloud-firestore

我正在构建一个用于出售书籍的Android应用。我的用户可以为二手书发布广告并出售。我打算添加一个功能,我的用户可以选择匿名。将出现一个名为Make me anonymous的复选框。如果用户选中该框,则其他人将看不到他们的电话号码和姓名。只有通用名称应该可见。

现在的问题是,我想在用户上传的每个广告文档中放置一个条目anonymous = true

我想查询用户投放的广告并添加一个字段anonymous = true。我想做以下事情:

 final CheckBox anonymousCB = findViewById(R.id.anonymousCB);
    anonymousCB.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (anonymousCB.isChecked()){
                WriteBatch batch = firestore.batch();
                DocumentReference sfRef = firestore.collection("books").whereEqualTo(uid,uid);
                batch.update(sfRef, "anonymous", "true");
            }
        }
    });

但是我无法进行查询并将字段插入与查询匹配的所有文档中。有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

  

还有更好的方法吗?

是的,有。要解决此问题,请在explicit B( std::string s )方法内使用以下代码行:

onCheckedChanged()

此代码的结果是将Query sfRef = firestore.collection("books").whereEqualTo(uid, uid); sfRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() { @Override public void onComplete(@NonNull Task<QuerySnapshot> task) { if (task.isSuccessful()) { List<String> list = new ArrayList<>(); for (DocumentSnapshot document : task.getResult()) { list.add(document.getId()); } for (String id : list) { firestore.collection("books").document(id).update("anonymous", true).addOnSuccessListener(new OnSuccessListener<Void>() { @Override public void onSuccess(Void aVoid) { Log.d(TAG, "anonymous field successfully updated!"); } }); } } } }); 属性添加到所有anonymous对象并将其设置为book。请注意,我使用了布尔true不是字符串true,就像您在代码中使用的那样。这样使用起来更方便。

建议。如果您正在为图书使用模型课程,请同时从此 post 中查看我的答案。