Java 如何更改集合下具有相同uid(类字段状态之一)的不同文档的特定字段(状态)的值?
我正在制作一个电子商务应用程序,当在ProductDetails活动中按下Add to cart按钮时,相应产品的详细信息将添加到“Pending”集合下,其中产品id作为文档名,字段如图所示。现在将有多个用户添加产品,但它们会在whereEqualsTo(“uid”,user.getUid())的帮助下被过滤。。因此,我的问题是,当我在placeOrder活动中下订单时,我想将该特定uid的state字段form cart的值更改为order。怎么做Java 如何更改集合下具有相同uid(类字段状态之一)的不同文档的特定字段(状态)的值?,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,我正在制作一个电子商务应用程序,当在ProductDetails活动中按下Add to cart按钮时,相应产品的详细信息将添加到“Pending”集合下,其中产品id作为文档名,字段如图所示。现在将有多个用户添加产品,但它们会在whereEqualsTo(“uid”,user.getUid())的帮助下被过滤。。因此,我的问题是,当我在placeOrder活动中下订单时,我想将该特定uid的state字段form cart的值更改为order。怎么做 placeOrder.setOnClick
placeOrder.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
db.collection("Pending")
.whereEqualTo("uid", user.getUid())
.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
Map<String, Object> cartMap = new HashMap<>();
cartMap.put("state", "orders");
db.collection("Pending").document().update(cartMap)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
finish();
}
});
}
});
}
});
placeOrder.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
db.收款(“待定”)
.whereEqualTo(“uid”,user.getUid())
.get().addOnCompleteListener(新的OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
Map cartMap=newhashmap();
cartMap.put(“状态”、“命令”);
db.collection(“待定”).document().update(cartMap)
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
完成();
}
});
}
});
}
});
您的代码有两个问题。第一个问题是调用.document()
方法而不传递任何参数,这实际上会创建一个新id。第二个问题是您没有循环以获得结果。因此,要解决这个问题,请使用以下代码行:
placeOrder.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
db.collection("Pending")
.whereEqualTo("uid", user.getUid())
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
db.collection("Pending").document(document.getId()).update("state", "orders")
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
//finish();
}
});
}
}
}
});
}
});
placeOrder.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
db.收款(“待定”)
.whereEqualTo(“uid”,user.getUid())
.get()
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
对于(QueryDocumentSnapshot文档:task.getResult()){
db.collection(“待定”).document(document.getId()).update(“state”、“orders”)
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
//完成();
}
});
}
}
}
});
}
});
还要注意调用
finish()代码>将在第一次更新完成时完成活动,这就是我评论该行的原因。您现在的代码有什么问题?请编辑问题,解释哪些问题没有按您预期的方式工作。我建议读一读:你解决问题了吗?请回复@AlexMamoNo sir@AlexMamoIf我会给你写一个答案,你愿意尝试并接受它吗?是的sure@AlexMamoDid it@Alex马莫