Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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
Java 如何更改集合下具有相同uid(类字段状态之一)的不同文档的特定字段(状态)的值?_Java_Android_Firebase_Google Cloud Firestore - Fatal编程技术网

Java 如何更改集合下具有相同uid(类字段状态之一)的不同文档的特定字段(状态)的值?

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

我正在制作一个电子商务应用程序,当在ProductDetails活动中按下Add to cart按钮时,相应产品的详细信息将添加到“Pending”集合下,其中产品id作为文档名,字段如图所示。现在将有多个用户添加产品,但它们会在whereEqualsTo(“uid”,user.getUid())的帮助下被过滤。。因此,我的问题是,当我在placeOrder活动中下订单时,我想将该特定uid的state字段form cart的值更改为order。怎么做

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马莫