我正在构建一个用于出售书籍的Android应用。我的用户可以为二手书发布广告并出售。我计划添加一个功能,我的用户可以选择匿名。将有一个名为name的复选框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");
}
}
});
但是我无法进行查询并将字段插入与查询匹配的所有文档中。有什么更好的方法吗?
有什么更好的方法吗?
就在这里。要解决此问题,请在onCheckedChanged()
method内部使用以下代码行:
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
而不是您在代码中使用的String true。这样更方便使用。
附言:如果您正在为书籍使用模型课程,请同时参阅本帖子中的答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句